由于android 手机的屏幕宽高比样式太多了,在设计UI时,很多时候,会因为宽高比,分辨率不同会有展示上的差异。
android中的dp在渲染前会将dp转为px,计算公式:
-
px = density * dp;
-
density = dpi / 160;
-
px = dp * (dpi / 160);
我是这样解决的高度适配问题
在activity的onCreate方法前,调用:

fun screenFit(context: Context) {
val metrics: DisplayMetrics = context.resources.displayMetrics
val td = metrics.heightPixels / 760f
val dpi = (160 * td).toInt()
metrics.density = td
metrics.scaledDensity = td //此属性可以使得字体也会正常的展示
metrics.densityDpi = dpi
}
这样就适配了
2024.2.19日补充
之前用这个方法,是因为UI设计图的设计高度为760dp,因为在UI的垂直方向上控件很多,为了适配各种手机,于是取得是val targetDensity = metrics.heightPixels / 760f,取得td和dpi后,对metrics的各种属性即可进行赋值。
此外,如果需要适配Ui设计图的360dp的屏幕宽度,则可以
fun screenFit(context: Context) {
val metrics: DisplayMetrics = context.resources.displayMetrics
val td = metrics.widthPixels / 360f
val dpi = (160 * td).toInt()
metrics.density = td
metrics.scaledDensity = td //此属性可以使得字体也会正常的展示
metrics.densityDpi = dpi
}
最近面试时向面试官提到了此方法,我想我在项目中,面试官说此方法完全不可行,我在多个项目中用过,也不知是哪儿的问题,网上查了下也有类似的做法,甚至今日头条也用的此方案,代码少,入侵性很低。
有大佬知道问题出在哪儿麻烦补充。

文章介绍了针对Android设备屏幕宽高比和分辨率差异导致的UI显示问题,提出了一种解决方案。通过调整DisplayMetrics的density属性,实现以760dp或360dp为基准的屏幕适配。作者提到这种方法在实际项目中有效,但面试官认为不可行,且网络上有类似做法,包括今日头条也使用此方案。
317

被折叠的 条评论
为什么被折叠?



