如何在Android 4.0以上版本中禁用主/菜单按钮?

如何在Android 4.0以上版本中禁用主/菜单按钮?,android,android-homebutton,Android,Android Homebutton,我正在开发一个锁屏应用程序,到目前为止,我已经实现了该应用程序工作所需的一切 但我不能禁用Android设备中的主/菜单按钮,因为它是虚拟的,也是软的。我已经在SO和其他网站上找到了所有可能的答案,但没有找到 是否有任何经过测试和工作的解决方法? 提前感谢。一种方法是显示一个对话框,其中LayoutParamstype设置为type\u SYSTEM\u ERROR,并将此对话框的所有者设置为“锁定屏幕”活动,以阻止home按钮 下面是一个如何实现这一点的示例: 更新:看起来这只适用于Andro

我正在开发一个锁屏应用程序,到目前为止,我已经实现了该应用程序工作所需的一切

但我不能禁用Android设备中的主/菜单按钮,因为它是虚拟的,也是软的。我已经在SO和其他网站上找到了所有可能的答案,但没有找到

是否有任何经过测试和工作的解决方法?
提前感谢。

一种方法是显示一个对话框,其中
LayoutParams
type设置为
type\u SYSTEM\u ERROR
,并将此对话框的所有者设置为“锁定屏幕”活动,以阻止home按钮

下面是一个如何实现这一点的示例: 更新:看起来这只适用于Android 4之前的版本+

另一种方法是将
contentView
直接添加到WindowManager,其中
LayoutParams
类型设置为
type\u SYSTEM\u ERROR

...
onCreate(){

    //setContentView(R.layout.main_content);
    //instead add a View directly to the WindowManager
    View contentView = View.inflate(this, R.layout.main_content, null);
    LayoutParams lockLayoutParams = new LayoutParams();
            lockLayoutParams.width = LayoutParams.MATCH_PARENT;
            lockLayoutParams.height = LayoutParams.MATCH_PARENT;
            lockLayoutParams.type = LayoutParams.TYPE_SYSTEM_ERROR;

            //LOCK
            getWindowManager().addView(contentView, lockLayoutParams);

...
            //UNLOCK
            getWindowManager().removeView(contentView);
这种方法的缺点是它看起来不支持更复杂的视图。我得到了很多在片段等列表视图闪烁

使用此功能的一些示例项目:


这里有更多类似问题的答案:

我尝试过使用它,但没有成功。而且它只会阻止虚拟主密钥,对吗@触摸板当我尝试时,它阻止了硬主页按钮,但这是在三星4.1。威尔森·克里斯蒂安更新了答案,他说:“我稍后会对我的一个项目进行测试,看看它是否仍然有效。”。我做了测试,它看起来不再在4以上工作,但我发布的另一个方法应该是。(它实际上并没有阻止按钮,更像是用覆盖层隐藏内容)您更新的答案与我的设计不符。我希望禁用虚拟键和主菜单硬件这两种类型的键?你有任何关于阻止硬件主密钥的信息吗?@WilsonChristian这是我所知道的,我在棒棒糖上测试了第二个选项,它对我有效。请用代码示例更新您的问题,说明您迄今为止所做的工作。