【发布时间】:2012-08-20 03:18:50
【问题描述】:
Android 似乎正在切断具有虚拟/屏幕按钮的设备的底部 100 像素。是否可以检测当前手机/平板电脑是否正在使用屏幕按钮,以便我可以解决缺少的空间?如果是这样,是否也可以获取按钮的高度?
【问题讨论】:
Android 似乎正在切断具有虚拟/屏幕按钮的设备的底部 100 像素。是否可以检测当前手机/平板电脑是否正在使用屏幕按钮,以便我可以解决缺少的空间?如果是这样,是否也可以获取按钮的高度?
【问题讨论】:
您可以使用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 中也没有原生方式来获取“可用”屏幕空间(底部栏未覆盖的区域)。
所以,我的建议如下:
ViewGroup或LinearLayout或其他东西)。onLayout()](http://developer.android.com/reference/android/widget/LinearLayout.html#onLayout(boolean, int, int, int, int)) 或 onMeasure(),并从中获取布局的精确高度。 (您可能需要使用this 作为参考。)【讨论】:
据我所知,底部的虚拟按钮仅适用于 android 版本 3.0 (Honeycomb) 及更高版本。 至于身高问题,我从来没有真正研究过。
【讨论】: