什么是dp
最简单的理解是Google 为了解决android碎片化的屏幕适配而弄出来的一套东西。
公式以及文章来源
Google的设计规范:https://material.io/guidelines/layout/units-measurements.html#
换算的基本公式
dp = (width in pixels * 160) / screen density
基本比对参数
Java 计算代码
public class ui {
public static void main(String[] args) {
// TODO Auto-generated method stub
double dp = getPixelsToDp(1920,480);
System.out.println("result:"+dp);
}
private static double getPixelsToDp(int pixels,int density){
return (pixels*160)/density;
}
}
计算
分辨率 :320 * 480
宽的dp:widthDp = ( 320 * 160 ) / 160 = 320
高的dp:widthDp = ( 480 * 160 ) / 160 = 480
分辨率 :480 * 800
宽的dp:widthDp = ( 480 * 160 ) / 240 = 320
高的dp:widthDp = ( 800 * 160 ) / 240 = 533
分辨率 :720 * 1280
宽的dp:widthDp = ( 720 * 160 ) / 320 = 360
高的dp:widthDp = ( 1280 * 160 ) / 320 = 640
分辨率 :1080 * 1920
宽的dp:widthDp = ( 1080 * 160 ) / 480 = 360
高的dp:widthDp =( 1920 * 160 ) / 480 = 640
提供 Android 的 kotlin dp,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()
}
}