Android 如何做到隐藏手机底部虚拟按键?

现在的Android手机有好多底部带虚拟按键,比如华为、nexus、魅族等等,一般情况下对APP没啥影响,但是有时候就必须要强制隐藏。

例如:游戏的时候,拍照的时候。。。

接下来加上几个方法就OK 了,代码如下

[html]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. /**  
  2.  * 隐藏虚拟按键,并且设置成全屏  
  3.  */  
  4. protected void hideBottomUIMenu(){  
  5.     if (Build.VERSION.SDK_INT > 11 && Build.VERSION.SDK_INT < 19) { // lower api  
  6.         View v = this.getWindow().getDecorView();  
  7.         v.setSystemUiVisibility(View.GONE);  
  8.     } else if (Build.VERSION.SDK_INT >= 19) {  
  9.         //for new api versions.  
  10.         View decorView = getWindow().getDecorView();  
  11.         int uiOptions = View.SYSTEM_UI_FLAG_LAYOUT_STABLE  
  12.                 | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION  
  13.                 | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN  
  14.                 | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION // hide nav bar  
  15.                   | View.SYSTEM_UI_FLAG_FULLSCREEN // hide status bar  
  16.                 | View.SYSTEM_UI_FLAG_IMMERSIVE;  
  17.         decorView.setSystemUiVisibility(uiOptions);  
  18.         getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);  
  19.     }  
  20. }  

反编译framework-res.apk(可在手机中system/framework/文件夹中找到),打开res/values/bools.xml


[html]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. /**  
  2.      * 检查是否存在虚拟按键栏  
  3.      * @param context  
  4.      * @return  
  5.      */  
  6.     public static boolean hasNavBar(Context context) {  
  7.         Resources res = context.getResources();  
  8. //这种方式一定要注意写法要正确,内部应该是通过反射去调用的。
  9.         int resourceId = res.getIdentifier("config_showNavigationBar", "bool", "android");  
  10.         if (resourceId != 0) {  
  11.             boolean hasNav = res.getBoolean(resourceId);  
  12.             // check override flag  
  13.             String sNavBarOverride = getNavBarOverride();  
  14.             if ("1".equals(sNavBarOverride)) {  
  15.                 hasNav = false;  
  16.             } else if ("0".equals(sNavBarOverride)) {  
  17.                 hasNav = true;  
  18.             }  
  19.             return hasNav;  
  20.         } else { // fallback  
  21.             return !ViewConfiguration.get(context).hasPermanentMenuKey();  
  22.         }  
  23.     }  
  24.   
  25.     /**  
  26.      * 判断虚拟按键栏是否重写  
  27.      * @return  
  28.      */  
  29.     private static String getNavBarOverride() {  
  30.         String sNavBarOverride = null;  
  31.         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {  
  32.             try {  
  33.                 Class c = Class.forName("android.os.SystemProperties");  
  34.                 Method m = c.getDeclaredMethod("get", String.class);  
  35.                 m.setAccessible(true);  
  36.                 sNavBarOverride = (String) m.invoke(null, "qemu.hw.mainkeys");  
  37.             } catch (Throwable e) {  
  38.             }  
  39.         }  
  40.         return sNavBarOverride;  
  41.     }  


  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要彻底隐藏Android设备上的底部虚拟按键,您可以尝试以下两种方法: 方法一:使用全屏模式 通过使用全屏模式,您可以完全隐藏底部虚拟按键。以下是实现此目的的步骤: 1. 在您的Android应用程序中,打开您想要隐藏底部虚拟按键的活动。 2. 在该活动的onCreate()方法中添加以下代码: ```java View decorView = getWindow().getDecorView(); int uiOptions = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_FULLSCREEN; decorView.setSystemUiVisibility(uiOptions); ``` 这将隐藏底部导航栏和状态栏。 3. 在该活动的onResume()方法中添加以下代码: ```java View decorView = getWindow().getDecorView(); int uiOptions = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_FULLSCREEN; decorView.setSystemUiVisibility(uiOptions); ``` 这将确保当用户返回到该活动时,底部导航栏和状态栏仍然被隐藏。 方法二:使用系统UI调节器 使用系统UI调节器,您可以在整个Android设备上隐藏底部虚拟按键。以下是实现此目的的步骤: 1. 打开您的Android设备上的设置应用程序。 2. 寻找“开发者选项”并打开它。 3. 滚动到“绘画”部分,并找到“禁用虚拟按键”选项。启用此选项。 4. 按下设备上的电源键,然后再按下“禁用虚拟按键”选项。此时,底部导航栏将被隐藏。 请注意,使用该选项可能会导致一些应用程序无法正常工作。如果您遇到任何问题,请在开发者选项中禁用此选项。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值