Android 兼容大部分机型判断是否有虚拟按键的方法

场景:
布局根据是否有虚拟导航键进行适配显示
问题:
如何判断Android 设置带有虚拟按键?
解决方案:
方法一,直接判断设置是否有虚拟按键,但是有些设备返回的结果存在问题。
方法二,通过判断设备是否有菜单键来判断,比如返回键。这样得到的结果更加准确。

通过两者的结合,基本可以兼容所有机型。

方法一:直接判断是否有虚拟按键

   public static boolean checkNavigationBarShow(@NonNull Context context, @NonNull Window window) {
        boolean show;
        Display display = window.getWindowManager().getDefaultDisplay();
        Point point = new Point();
        display.getRealSize(point);

        View decorView = window.getDecorView();
        Configuration conf = context.getResources().getConfiguration();
        if (Configuration.ORIENTATION_LANDSCAPE == conf.orientation) {
            View contentView = decorView.findViewById(android.R.id.content);
            show = (point.x != contentView.getWidth());
        } else {
            Rect rect = new Rect();
            decorView.getWindowVisibleDisplayFrame(rect);
            show = (rect.bottom != point.y);
        }
        return show;
        }

方法二:判断时候有菜单键,返回键

public static boolean checkDeviceHasNavigationBar2(Context activity) {
    //通过判断设备是否有返回键、菜单键(不是虚拟键,是手机屏幕外的按键)来确定是否有navigation bar
    boolean hasMenuKey = ViewConfiguration.get(activity)
        .hasPermanentMenuKey();
    boolean hasBackKey = KeyCharacterMap
        .deviceHasKey(KeyEvent.KEYCODE_BACK);

    if (!hasMenuKey && !hasBackKey) {
        // 做任何你需要做的,这个设备有一个导航栏
        return true;
    }
    return false;
}

你可能感兴趣的:(Android 兼容大部分机型判断是否有虚拟按键的方法)