今天,简单讲讲android如何隐藏手机下面的虚拟按键。


其实,自己在做界面适配时,老是发现了华为手机存在适配的问题,主要就是华为手机有一个底部的虚拟按键占用了界面的部分空间,所以在网上搜索了如何隐藏华为手机下方的虚拟按键,最终找到的代码。这里记录一下。

    /**     * 隐藏虚拟按键,并且全屏     */    protected void hideBottomUIMenu(){        //隐藏虚拟按键,并且全屏        if (Build.VERSION.SDK_INT > 11 && Build.VERSION.SDK_INT < 19) { // lower api            View v = this.getWindow().getDecorView();            v.setSystemUiVisibility(View.GONE);        } else if (Build.VERSION.SDK_INT >= 19) {            //for new api versions.            View decorView = getWindow().getDecorView();            int uiOptions = View.SYSTEM_UI_FLAG_LAYOUT_STABLE                    | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION                    | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN                    | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION // hide nav bar//                    | View.SYSTEM_UI_FLAG_FULLSCREEN // hide status bar                    | View.SYSTEM_UI_FLAG_IMMERSIVE;            decorView.setSystemUiVisibility(uiOptions);            getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);        }    }


/**     * 检查是否存在虚拟按键栏     * @param context     * @return     */    public static boolean hasNavBar(Context context) {        Resources res = context.getResources();        int resourceId = res.getIdentifier("config_showNavigationBar", "bool", "android");        if (resourceId != 0) {            boolean hasNav = res.getBoolean(resourceId);            // check override flag            String sNavBarOverride = getNavBarOverride();            if ("1".equals(sNavBarOverride)) {                hasNav = false;            } else if ("0".equals(sNavBarOverride)) {                hasNav = true;            }            return hasNav;        } else { // fallback            return !ViewConfiguration.get(context).hasPermanentMenuKey();        }    }    /**     * 判断虚拟按键栏是否重写     * @return     */    private static String getNavBarOverride() {        String sNavBarOverride = null;        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {            try {                Class c = Class.forName("android.os.SystemProperties");                Method m = c.getDeclaredMethod("get", String.class);                m.setAccessible(true);                sNavBarOverride = (String) m.invoke(null, "qemu.hw.mainkeys");            } catch (Throwable e) {            }        }        return sNavBarOverride;    }


简单讲讲,这个代码调用时最好先调用hasNavBar(Context context)判断手机是否存在虚拟按键,然后调用hideBottomUIMenu()隐藏虚拟按键,不然在没有虚拟按键的手机上直接使用hideBottomUIMenu()会存在问题。还有一点需要注意,那就是如果设置了沉浸式状态栏,那么是无法隐藏底部虚拟按键的。

或者在xml文件里设置了

android:clipToPadding="true"android:fitsSystemWindows="true"


也是无法隐藏底部虚拟按键的。


android 隐藏手机底部虚拟按键就讲完了。


就这么简单。

更多相关文章

  1. Android正加强对全球智能手机市场的控制
  2. Android(安卓)6.0 权限使用 以及小米手机权限的适配
  3. Android屏蔽Home按键
  4. 深夜扒一扒Android的发展史
  5. Android(安卓)按键事件处理详解
  6. Android(安卓)小米盒子游戏手柄按键捕获 - 能获取到的 home 键依
  7. Android实现短信验证功能(功能的使用)
  8. 第三方推送已死
  9. HTC表示2010年新机将升级Android(安卓)2.2

随机推荐

  1. 【Android】选项卡使用
  2. Android(安卓)webview HitTestResult识别
  3. Android Launcher3去除应用列表,二级菜单,
  4. ViewPagerIndicator使用
  5. Android Studio 调试工具常见问题
  6. React Native與Android交互
  7. android 获取以太网的连接状态
  8. Android中如何获得本机号码信息
  9. 整理一下Android中的ListView
  10. android protobuf错误