参考: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()
}
}
网友评论