欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

华为手机切换分辨率,导致布局变大变小甚至混乱的问题

程序员文章站 2022-03-11 15:26:55
华为手机切换分辨率,导致布局变大变小甚至混乱的问题...

1、如果碰到跟标题一样类似的问题的同学,先看一篇文章:(https://blog.csdn.net/u012440207/article/details/100695995)

2、然后我再说我新接手项目中遇到的问题 ,在项目中的工具类DIsplayUtils中有这么个方法,请看注释2

/**
     * 系统设置"显示大小"时原有UI样式保持不变:
     * <p>
     * 1、当调节手机系统"显示大小"【调大】的时候,相应的dpi会变大【dp = (dpi/160) * px】,此时dp就会变大,所以相应的UI布局就会变大。
     * 2、当调节手机系统"分辨率"【调小】的时候,相应的dpi会变小【比如由480-->320】。如果此时使用技术手段使dpi保持不变,那么相同的dp就会占用更多的px,所以UI布局就会变大。
     */
    public static void setDefaultDisplay(Context context) {
        if (Build.VERSION.SDK_INT > Build.VERSION_CODES.M) {
            Configuration origConfig = context.getResources().getConfiguration();
            //获取手机出厂时默认的densityDpi【注释1】
            origConfig.densityDpi = getDefaultDisplayDensity();

            Log.d(TAG, "densityDpi: " + origConfig.densityDpi);
            context.getResources().updateConfiguration(origConfig, context.getResources().getDisplayMetrics());
        }
    }
然后我再说我新接手项目中,在所有activity的基类中都复写了一个方法,强制dpi不变:
  override fun getResources(): Resources {
        val res = super.getResources()
        res.updateConfiguration(Configuration().apply {
            setToDefaults()
            if (Build.VERSION.SDK_INT > Build.VERSION_CODES.M) {
                densityDpi = DisplayUtil.getDefaultDisplayDensity()
            }
        }, res.displayMetrics)
        return res
    }

此方法导致华为手机切换分辨率的时候,dpi不变,因为dpi不变,因此在不同分辨率上显示的大小肯定不一样,这问题拦了我一天,解决不难,注释掉就行,找到问题太难了。
幸好有前面大佬的一篇文章给我提示,或者说我这个前任写代码的时候全部照抄了那篇文章,但是又抄的不伦不类,给我留了一个大坑,幸好现在解决了。

本文地址:https://blog.csdn.net/qq_35469691/article/details/107508831