【问题标题】:Is it possible to detect Android virtual buttons programmatically?是否可以以编程方式检测 Android 虚拟按钮?
【发布时间】:2012-08-20 03:18:50
【问题描述】:

Android 似乎正在切断具有虚拟/屏幕按钮的设备的底部 100 像素。是否可以检测当前手机/平板电脑是否正在使用屏幕按钮,以便我可以解决缺少的空间?如果是这样,是否也可以获取按钮的高度?

【问题讨论】:

    标签: android button virtual


    【解决方案1】:

    您可以使用hasPermanentMenuKey() 检查设备是否具有永久(硬件)菜单按钮。可以如下使用:

    boolean hasMenuKey = ViewConfiguration.get(context).hasPermanentMenuKey();
    

    请注意,此技术仅适用于 API 14+(ICS、JB)。没有任何设备 pre-API-11 有菜单按钮,因此只有 API 11-13 没有检查;请记住,这 3 个 API 级别目前只有 2.3% of the Android population

    或者(虽然不可靠),您可以尝试搜索方向键:

    boolean hasDpad = getResources().getConfiguration().naviation == Configuration.NAVIGATION_DPAD;
    

    here 所见,没有办法检查硬件搜索按钮(我也会假设主页/返回)。 (还有here;这个帖子提出了一种替代方法,虽然我不确定它是否适用于你的情况。)

    我会提到两件事:虚拟按钮永远不应该覆盖您的内容。它们确实会从设备窗口的高度中减去(由显示器的指标获取),但如果您使用 match_parent 作为高度,它们将永远不会妨碍您的布局。其次,无法获取虚拟按钮栏的准确高度;它可能会在构建之间发生变化。 Android API 中也没有原生方式来获取“可用”屏幕空间(底部栏未覆盖的区域)。

    所以,我的建议如下:

    【讨论】:

    • 谢谢!那时我似乎无能为力。但是,至少在 Nexus 7 上,尽管设置了 match_parent,但虚拟按钮仍然覆盖了我的内容。我能找到的最快的测试是用 match_parent 填充 ScrollView。表示您无法进一步滚动的细蓝线在边缘被按钮切断。 (在我的情况下,如果我不考虑它,有一个大约相同高度的可拖动手柄会从屏幕上消失)。不过,希望我错了,因为我没有在没有句柄逻辑的情况下进行测试。如果是我做错了什么,那更容易修复。
    • 这很奇怪;我的 Galaxy Nexus 没有这个问题。可悲的是,我没有 Nexus 7 来确认它。抱歉,我无法提供更多帮助!
    • 填充!天啊。填充是导致我的问题的原因。我……我现在很尴尬。但感谢上帝,这是我的错。
    • 同意!很高兴你现在修好了! :)
    【解决方案2】:

    据我所知,底部的虚拟按钮仅适用于 android 版本 3.0 (Honeycomb) 及更高版本。 至于身高问题,我从来没有真正研究过。

    【讨论】:

    • 他们仍然在制造带有硬件按钮的手机,所以我不能假设所有 3.0 以上的设备都会有虚拟按钮。
    • Kindle Fire 有一个虚拟按钮栏并运行姜饼 (2.3)
    猜你喜欢
    • 2012-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-31
    相关资源
    最近更新 更多