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