那几款苹果手机虚拟home键怎么设置有虚拟按键?


在项目的开发过程中,发现小米部分手机有一个全面屏手势功能,该功能可隐藏底部虚拟按键,通过手势的方式来实现返回和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);
}
通过上述方法,即可获取到真实的屏幕高度。

我要回帖

更多关于 苹果手机虚拟home键怎么设置 的文章