问题的起因是这样的:
首先是我在手机上发现了可以切换分辨率的操作:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EB5GTv8d-1592315394117)(https://2s.beer/img/WechatIMG2.jpeg)]
然后我就想到了测试一下这个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);