随着手机不断更新换代,从物理按键到虚拟按键到全面屏都需要去适配。
1. 最简单的虚拟按键适配:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
Window window = getWindow(); // Translucent status bar
window.setFlags( WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS,WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);}
布局:android:fitsSystemWindows="true"
最近手上的项目在写电商,按照京东首页的风格写:沉浸式状态栏。
因为android:fitsSystemWindows="true"的原理是加paddingTop,发现虚拟按键问题确实不用考虑,但是也无法实现沉浸式状态栏的效果。如果项目只需要动态设置状态栏颜色,建议直接使用。
2.判定手机是否有虚拟按键:
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; }
本人手机新换的小米8,测试一下项目发现底部还是空出了虚拟按键的高度。搜索发现此方法利用反射拿到系统信息,判断的手机是否有虚拟按键。而不是页面。
寻觅一天发现一位博主的文章,欣喜若狂。