华为手机切换分辨率,导致布局变大变小甚至混乱的问题
程序员文章站
2022-06-22 19:07:18
华为手机切换分辨率,导致布局变大变小甚至混乱的问题...
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