b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

手机屏幕尺寸怎么量 Android APP适配全面屏手机的技术要点(3)

电脑杂谈  发布时间:2018-02-08 04:49:54  来源:网络整理

具体的使用方法本文就不详细介绍了,可以参考官方的sample: android-percent-support-lib-sample

或者这个博客:百分比布局支持库

由于不同手机厂商对系统做了不同的修改,对系统界面底部的NavigationBar处理方式也就各不相同,有些手机系统有NavigationBar,有些手机没有,还有则是在设置增加开关,让用户选择是否启用NavigationBar。因此,对弈APP开发者来说,完美适配虚拟导航键也是一件比较有挑战性的事。

首先,我们来看看android源码有没有提供公共API来判断当前系统是否存在NavigationBar。

通过查阅Android源码,我们发现在WindowManagerService.java下面有一个方法是hasNavigationBar:

    @Override
    public boolean hasNavigationBar() {
        return mPolicy.hasNavigationBar();
    }

但是,WindowManagerService是系统服务,我们无法直接调用这个方法。那我继续看这个方法的具体实现。

mPolicy是什么呢?看源码:final WindowManagerPolicy mPolicy;,WindowManagerPolicy只是一个接口,具体的实现是在哪里呢?

它的实现类是PhoneWindowManager,所以最终是调到了PhoneWindowManager的hasNavigationBar()

    // Use this instead of checking config_showNavigationBar so that it can be consistently
    // overridden by qemu.hw.mainkeys in the emulator.
    @Override
    public boolean hasNavigationBar() {
        return mHasNavigationBar;
    }

再看看PhoneWindowManager中给mHasNavigationBar赋值的地方在哪里:

public void setInitialDisplaySize(Display display, int width, int height, int density) {
        ...
        ...
        mHasNavigationBar = res.getBoolean(com.android.internal.R.bool.config_showNavigationBar);

        // Allow a system property to override this. Used by the emulator.
        // See also hasNavigationBar().
        String navBarOverride = SystemProperties.get("qemu.hw.mainkeys");
        if ("1".equals(navBarOverride)) {
            mHasNavigationBar = false;
        } else if ("0".equals(navBarOverride)) {
            mHasNavigationBar = true;
        }
        ...
        ...
}


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/sanxing/article-66607-3.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    • 刘怡君
      刘怡君

      枷锁在一根根往自己脖子上套

    热点图片
    拼命载入中...