Android 似乎正在切断具有虚拟/屏幕按钮的设备的底部 100 像素。是否可以检测当前手机/平板电脑是否正在使用屏幕按钮,以便我可以解决缺少的空间?如果是这样,是否也可以获得按钮的高度?
问问题
4790 次
2 回答
2
您可以使用 来检查设备是否具有永久(硬件)菜单按钮hasPermanentMenuKey()
。它可以如下使用:
boolean hasMenuKey = ViewConfiguration.get(context).hasPermanentMenuKey();
请注意,此技术仅适用于 API 14+(ICS、JB)。没有任何设备 pre-API-11 有菜单按钮,因此只有 API 11-13 没有检查;请记住,这 3 个 API 级别目前仅占Android 用户的 2.3%。
或者(虽然不可靠),您可以尝试搜索 D-Pad:
boolean hasDpad = getResources().getConfiguration().naviation == Configuration.NAVIGATION_DPAD;
没有办法检查硬件搜索按钮(我也会假设 home/back),如此处所示。(也在此处;该线程提出了一种替代方法,尽管我不确定它是否适用于您的情况。)
我会提到两件事:虚拟按钮永远不应该覆盖您的内容。它们确实会从设备窗口的高度中减去(由显示器的指标获取),但如果您将match_parent
其用作高度,它们将永远不会妨碍您的布局。其次,无法获取虚拟按钮栏的准确高度;它可能会在构建之间发生变化。Android API 中也没有本地方式来获取“可用”屏幕空间(底部栏未覆盖的区域)。
所以,这是我的建议:
- 忘记检查硬件按钮。你应该只关心你有多少空间,而不是你失去了多少(或者你为什么失去它)。
- 制作自定义布局类型(扩展
ViewGroup
或LinearLayout
其他)。 - 将现有布局包装在此布局中。
- 您现在可以覆盖 [
onLayout()
]( http://developer.android.com/reference/android/widget/LinearLayout.html#onLayout(boolean , int, int, int, int)) 或onMeasure()
,并从中获取布局的确切高度. (您可能想以此作为参考。)
于 2012-08-20T06:11:32.297 回答
0
据我记得,底部的虚拟按钮仅适用于 android 版本 3.0 (Honeycomb) 及更高版本。至于身高问题,我从来没有真正研究过。
于 2012-08-20T03:53:30.283 回答