Android刘海屏全面屏底部导航栏的适配

关于Android状态栏和虚拟导航栏的适配,文章:https://blog.csdn.net/leogentleman/article/details/54566319
讲的很不错。
状态栏的适配:
在activity里设置了
View decorView = getWindow().getDecorView();
int uiOptions = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_FULLSCREEN;
decorView.setSystemUiVisibility(uiOptions);
即可。然后再用下面的方法获取状态栏的高度进行适配:
public static int getStatusBarHeight(Context context) {
int statusBarHeight = 0;
int resourceId = context.getResources().getIdentifier(“status_bar_height”, “dimen”, “android”);
if (resourceId > 0) {
statusBarHeight = context.getResources().getDimensionPixelSize(resourceId);
}
return statusBarHeight;
}

底部虚拟导航栏的适配:
可以使用下 面的方法获取底部导航栏的高度:
//获取是否存在NavigationBar
public static boolean checkDeviceHasNavigationBar(Context context) {
boolean hasNavigationBar = false;
Resources rs = context.getResources();
int id = rs.getIdentifier(“config_showNavigationBar”, “bool”, “android”);
if (id > 0) {
hasNavigationBar = rs.getBoolean(id);
}
try {
Class systemPropertiesClass = Class.forName(“android.os.SystemProperties”);
Method m = systemPropertiesClass.getMethod(“get”, String.class);
String navBarOverride = (String) m.invoke(systemPropertiesClass, “qemu.hw.mainkeys”);
if (“1”.equals(navBarOverride)) {
hasNavigationBar = false;
} else if (“0”.equals(navBarOverride)) {
hasNavigationBar = true;
}
} catch (Exception e) {
}
return hasNavigationBar
}

// 获取NavigationBar高度
public static int getNavigationBarHeight(Context context) {
Resources resources = context.getResources();
int resourceId = resources.getIdentifier(“navigation_bar_height”,“dimen”, “android”);
int height = resources.getDimensionPixelSize(resourceId);
return height;

}

不过在小米手机上,MIUI9,10上有刘海屏模式和全面屏模式,需要进行分别适配。
Settings.Global.getInt(mContext.getContentResolver(), “force_black”, 0) == 1
可以判断是不是刘海屏,指针对不是刘海屏的情况适配。

你可能感兴趣的:(小米手机虚拟导航栏适配,安卓刘海屏适配)