关于Android全面屏与虚拟按键适配问题

随着手机不断更新换代,从物理按键到虚拟按键到全面屏都需要去适配。


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,测试一下项目发现底部还是空出了虚拟按键的高度。搜索发现此方法利用反射拿到系统信息,判断的手机是否有虚拟按键。而不是页面。

寻觅一天发现一位博主的文章,欣喜若狂。

https://blog.csdn.net/wzhseu/article/details/58117424

你可能感兴趣的:(Android)