Android 似乎在具有虚拟/屏幕按钮的设备上切断了底部的 100 像素。是否可以检测当前手机/平板电脑是否正在使用屏幕按钮,以便我可以解决丢失的空间?如果是这样,是否也可以获得按钮的高度?
最佳答案
您可以使用 hasPermanentMenuKey()
检查设备是否具有永久(硬件)菜单按钮.它可以按如下方式使用:
boolean hasMenuKey = ViewConfiguration.get(context).hasPermanentMenuKey();
请注意,此技术仅适用于 API 14+(ICS、JB)。 API-11 之前的设备都没有菜单按钮,因此只有 API 11-13 没有检查;请记住,这 3 个 API 级别只有 2.3% of the Android population目前。
或者(虽然不可靠),您可以尝试搜索方向键:
boolean hasDpad = getResources().getConfiguration().naviation == Configuration.NAVIGATION_DPAD;
没有办法检查硬件搜索按钮(我假设 home/back 也是如此),如图所示 here . (还有 here ;此线程提出了一种替代方法,但我不确定它是否适用于您的情况。)
我要提到两件事:虚拟按钮永远不应该覆盖您的内容。它们确实会从设备窗口的高度中减去(由显示器的指标获取),但如果您使用 match_parent
作为高度,它们将永远不会妨碍您的布局。其次,无法获取虚拟按钮栏的准确高度;它可能会在构建之间发生变化。 Android API 中也没有本地方法来获取“可用”屏幕空间(底部栏未覆盖的区域)。
那么,这是我的建议:
- 忘记检查硬件按钮。你应该只关心你有多少空间,而不是你失去了多少(或者你为什么失去它)。
- 做一个custom layout type (扩展
ViewGroup
或LinearLayout
或其他东西)。 - 在此布局中包装您现有的布局。
- 您现在可以覆盖 [
onLayout()
]( http://developer.android.com/reference/android/widget/LinearLayout.html#onLayout(boolean , int, int, int, int)) 或onMeasure()
,并从中获取布局的精确高度。 (您可能想使用 this 作为引用。)
关于android - 是否可以通过编程方式检测 Android 虚拟按钮?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12031923/