Android 小米全面屏手势底部虚拟按键的适配

在项目的开发过程中,发现小米部分手机有一个全面屏手势功能,该功能可隐藏底部虚拟按键,通过手势的方式来实现返回和Home功能。

效果如下所示:
在这里插入图片描述
当开启全面屏手势的时候,就会存在一个问题,我们通过以下代码来获取的屏幕高度

DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
int height = metrics.heightPixels;

获取到的屏幕高度还是包括底部虚拟按键的高度的,这个时候我们就要针对小米的全面屏做单独的适配处理。

适配处理

是否是小米手机

为了解决这个问题,首先我们要判断当前手机是否是小米手机:

Build.MANUFACTURER.equals("Xiaomi")

如果返回true是小米手机,false 不是

是否开启全面屏手势

判断出是小米手机后,需要判断当前手机是否开启了全面屏手势:

Settings.Global.getInt(context.getContentResolver(), "force_fsg_nav_bar", 0) != 0

如果返回true开启全面屏手机,false 没有

对上述两种方法进行封装处理后:

	/**
     * 判断是否是小米手机 并且是否开启全面屏
     *
     * @return
     */
    public static boolean isXiaoMi(Context context) {
        if (Build.MANUFACTURER.equals("Xiaomi")) {
            return Settings.Global.getInt(context.getContentResolver(), "force_fsg_nav_bar", 0) != 0;
        }
        return false;
    }

判断是否开启全面屏后,只需要获取底部导航栏的高度,然后,在获取屏幕高度的时候,根据不同的手机设备,动态的设置屏幕的宽高,如果是小米手机且开启全面屏,加上底部导航栏高度即可。

获取底部导航栏高度

/**
     * 获取底部虚拟按键高度
     * @param context
     * @return
     */
    public static int getNavigationBarHeight(Context context) {
        WindowManager windowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
        Display display = windowManager.getDefaultDisplay();
        DisplayMetrics dm = new DisplayMetrics();
        try {
            @SuppressWarnings("rawtypes")
            Class c = Class.forName("android.view.Display");
            @SuppressWarnings("unchecked")
            Method method = c.getMethod("getRealMetrics", DisplayMetrics.class);
            method.invoke(display, dm);
            return dm.heightPixels - display.getHeight();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return 0;
    }

真实的屏幕高度:

		DisplayMetrics metrics = new DisplayMetrics();
        getWindowManager().getDefaultDisplay().getMetrics(metrics);
        int height = metrics.heightPixels;
        if (isXiaoMi(activity)) {
            height += getNavigationBarHeight(activity);
        }

通过上述方法,即可获取到真实的屏幕高度。

  • 10
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值