美文网首页
解决Android 全屏虚拟按键弹出挤压布局问题!

解决Android 全屏虚拟按键弹出挤压布局问题!

作者: 坐怀灬不乱 | 来源:发表于2020-01-07 09:23 被阅读0次
  • 隐藏虚拟按键
public static void hideBottomUIMenu(Activity activity) {
    if (!checkDeviceHasNavigationBar(activity))
            return;
    if (Build.VERSION.SDK_INT > 11 && Build.VERSION.SDK_INT < 19) {
            View v = activity.getWindow().getDecorView();
            v.setSystemUiVisibility(View.GONE);
        } else if (Build.VERSION.SDK_INT >= 19) {
            View decorView = activity.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);
           }
} 
  • 显示虚拟按键
 public static void showBottomUIMenu(Activity activity) {
        if (!checkDeviceHasNavigationBar(activity))
            return;
        if (Build.VERSION.SDK_INT > 11 && Build.VERSION.SDK_INT < 19) {
            //低版本sdk
            View v = activity.getWindow().getDecorView();
            v.setSystemUiVisibility(View.VISIBLE);
        } else if (Build.VERSION.SDK_INT >= 19) {
            View decorView = activity.getWindow().getDecorView();
            int uiOptions =
                    View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                            //下面这一句是关键,不加这一句,虚拟键盘弹出时将挤压布局
                            | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION 
                            | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN;
            decorView.setSystemUiVisibility(uiOptions);
        }
    }
  • 获取是否有虚拟按键
public static boolean checkDeviceHasNavigationBar(Context context) {

        boolean hasMenuKey = ViewConfiguration.get(context)
                .hasPermanentMenuKey();
        boolean hasBackKey = KeyCharacterMap
                .deviceHasKey(KeyEvent.KEYCODE_BACK);
        if (!hasMenuKey & !hasBackKey) {
            // 做任何你需要做的,这个设备有一个导航栏
            return true;
        }
        return false;
    }
  • 设置虚拟按键背景颜色
   public static void setNavigationColor(Activity activity, int color) {
        if (!checkDeviceHasNavigationBar(activity))
            return;
        if (Build.VERSION.SDK_INT > 21) {
            activity.getWindow().setNavigationBarColor(color);
        }
    }

相关文章

网友评论

      本文标题:解决Android 全屏虚拟按键弹出挤压布局问题!

      本文链接:https://www.haomeiwen.com/subject/pjxractx.html