AndroidAutoSize出现的一个小问题

问题的起因是这样的:

首先是我在手机上发现了可以切换分辨率的操作:

然后我就想到了测试一下这个autosize的问题,在没有推出app,然后切换分辨率,果真出现了显示问题!然后重启app之后一切恢复。但是我试了一下今日头条APP(为什么是今日头条,因为这个方案就是今日头条的适配方案),没有出现这个问题……

帅气的我然后就知道了:我要在生命周期里判断屏幕分辨率,有变化的话就给APP重启(重启的代码见下面,和切换语言之后app重启的逻辑差不多)。

后来我看到里这个:

AutoSizeConfig.getInstance().getUnitsManager()
        .setSupportDP(false)
        .setSupportSP(false)
        .setSupportSubunits(Subunits.MM);

AutoSizeConfig里面看了一下…我就知道方法了,具体代码看下面

但是后来我在群里看到了这个类:ScreenUtils。同样也是AutoSize包里的,里面有具体获取设备宽高的方法(getScreenSize),具体我就不说了,大家自己搜索一下。

具体的处理代码(写在Application中):

private void initAutoSize() {
        AutoSizeConfig.getInstance().setUseDeviceSize(true).setBaseOnWidth(true).setAutoAdaptStrategy(new AutoAdaptStrategy() {
            @Override
            public void applyAdapt(Object target, Activity activity) {
                AutoSizeConfig.getInstance().setScreenWidth(ScreenUtils.getScreenSize(activity)[0]);
                AutoSizeConfig.getInstance().setScreenHeight(ScreenUtils.getScreenSize(activity)[1]);
            }
        }).getUnitsManager().setSupportDP(true).setSupportSP(true);
    }

另外这里推荐看一下官方文档:DisplayMetrics,对这个类的一些解释和使用。你不需要担心获取的分辨率是否正确,因为获取到的是当前设备的分辨率,可以点击查看:https://developer.android.com/reference/android/util/DisplayMetrics.html#heightPixels 或者 https://developer.android.com/reference/android/util/DisplayMetrics.html#widthPixels

重启App的代码

Intent intent = new Intent(this, MainActivity.class);  
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);  
startActivity(intent);  
android.os.Process.killProcess(android.os.Process.myPid());  
System.exit(0);