AndroidAutoSize屏幕适配使用时遇到的特麻烦bug

29 阅读1分钟

前言

维护、迭代老项目时候遇到的事情。

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库的使用方式,指定有点毛病。