参考:http://www.dlxp.cn/dp-and-px.html
https://developer.android.com/guide/practices/compatibility
dp = (width in pixels * 160) / screen density
在Android中,规定以160dpi(即屏幕分辨率为320×480)为基准:1dp=1px
密度类型
代表的分辨率(px)
屏幕密度(dpi)
换算(px/dp)
比例
低密度(ldpi)
240×320
120
1dp=0.75px
3
中密度(mdpi)
320×480
160
1dp=1px
4
高密度(hdpi)
480×800
240
1dp=1.5px
6
超高密度(xhdpi)
720×1280
320
1dp=2px
8
超超高密度(xxhdpi)
1080×1920
480
1dp=3px
12
getResources().getDisplayMetrics().densityDpi 就是屏幕密度。
getResources().getDisplayMetrics().density 也可以理解为1dip相当于多少个px啦。
转换代码
object ScreenUtil {
/**
* 根据手机的分辨率从 dp 的单位 转成为 px(像素)
*/
fun dp2px(context: Context, dpValue: Float): Int {
val scale = context.resources.displayMetrics.density
return (dpValue * scale + 0.5f).toInt()
}
/**
* 根据手机的分辨率从 px(像素) 的单位 转成为 dp
*/
fun px2dp(context: Context, pxValue: Float): Int {
val scale = context.resources.displayMetrics.density
return (pxValue / scale + 0.5f).toInt()
}
}