前言
维护、迭代老项目时候遇到的事情。
com.github.JessYanCoding:AndroidAutoSize
代码
AutoSizeConfig.getInstance()
.setCustomFragment(false)
.setExcludeFontScale(true)
.setLog(false)
.setBaseOnWidth(true)
.setUseDeviceSize(false) //屏幕适配监听器
.setOnAdaptListener(object : onAdaptListener {
override fun onAdaptBefore(target: Any?, activity: Activity?) {
ScreenUtils.getScreenSize(activity) 的参数一定要不要传 Application!!!
AutoSizeConfig.getInstance().setScreenWidth(720)
AutoSizeConfig.getInstance().setScreenHeight(1080)
}
配置了固定的尺寸。
adapter的数据加载异常
开始的时候没有理会,因为UI异常并不明显,实际是源代码的开发者,用了些邪法,让字体显示的位置比较固定,但实际的字体大小是不同的。
后来在增加新的显示UI时,就发现问题了。
我直接移除了邪法的控件设置,异常就特别的明显。
字体大小完全不同。
adapter下来刷新就出现问题。
特别是在表现上,从另一个Activity跳转回来,就会触发异常问题。
最后的解决
@Override
public void onBindViewHolder(@NonNull BindingViewHolder<ItemProductBinding> holder, int position) {
// 在每次绑定数据时确保 density 正确
AutoSizeConfig.getInstance().setScreenWidth(720);
AutoSizeConfig.getInstance().setScreenHeight(1080);
AutoSizeCompat.autoConvertDensityOfGlobal(context.getResources());
ItemProductBinding binding = holder.binding;
GoodsData item = itemList.get(position);
增加了如此的设置之后,adapter总算是没有发生UI显示的异常了。
补充
根据 AndroidAutoSize 官方文档,Dialog、PopupWindow 等控件需要在每次 `show()` 之前手动触发适配。
还有异常
Activity中底部栏内容,一切换语言就出现UI显示异常,缩小为原屏幕的dpi。这不是想要的效果。
//于是,解决的办法,在BaseActivity中
onCreate(){
//在布局加载前,做出dpi的修改
AutoSizeConfig.getInstance().setScreenWidth(720)
AutoSizeConfig.getInstance().setScreenHeight(1080)
AutoSizeCompat.autoConvertDensityOfGlobal(resources)
setContentView()
}
感觉这老项目对这个老AutoSize库的使用方式,指定有点毛病。