Android编程开发 px,sp,dp,sp 之间的关系解析
先来说说基本的概念吧:
手机的尺寸: 屏幕对角线的长度,单位为英寸(2.54cm)
手机的分辨率:屏幕能显示的像素的数量, 一般用在长方向上数量*宽方向上数量来表达,即经常说的1920*1080
手机的像素密度ppi(pixels per inch):即每英寸屏幕能显示的像素数,像素密度越大,显示画面细节就越丰富。计算:像素密度={1+√[(长度像素数-1)^2+(宽度像素数-1)^2]}/屏幕尺寸
dpi(Dots Per Inch)的缩写:用来表示打印机打印分辨率, 但有时也会用dpi来代指ppi
手机的密度 Density:以160dpi为基准,手机的像素密度与基准的比值。 即像素密度为160时Density为1
手机的密度: Density, 以160dpi为基准,手机的像素密度与基准的比值。 即像素密度为160时Density为1px: pixel 像素,屏幕中可显示的最小单元。
pt: point 磅数 1磅等于 1/72英寸 ,一般pt都会作为字体的单位来使用(印刷行业使用)
dpi: density per inch 每英寸像素密度
dp: 也称作 dip density independent pixel 密度无关像素,它在不同像素密度的屏幕中的显示比例保持一致
sp: scaled pixels 是可伸缩像素的意思
dp,sp是可以根据手机的不同进行适配的
常用dpi标识(字母) 常用dpi标识(数字) 手机密度(density) ldpi 120dpi 0.75 mdpi 160dpi 1.0 hdpi 240dpi 1.5 xhdpi 320dpi 2.0
计算方式:
定义:1dp = (dpi / 160) px
也就是1px = 1/density dp
即:1dp = density px
160dpi:1dp = 1px
120dpi:1dp = 0.75px
320dpi:1dp = 2px
dp值转换为px值得方法为:
假设手机密度 :density = x,dp的值为y
由1dp = density px
可知ydp = yx px
所以结果为yx
px值转换为dp值得方法为:
假设手机密度 :density = x,px的值为y
由1px = 1/density dp
可知 ypx = y/x dp
所以结果为y/x
获取屏幕尺寸
double y = Math.pow(outMetrics.heightPixels / outMetrics.ydpi, 2); double screenInches = Math.sqrt(x + y); //屏幕尺寸(英寸) System.out.println("width : " + screenInches);
总结:
在Android中文字的尺寸一律用sp单位,非文字的尺寸一律使用dp单位。例如textSize=”16sp”、layout_width=”60dp”