欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android编程开发 px,sp,dp,sp 之间的关系解析

程序员文章站 2022-07-28 21:01:59
先来说说基本的概念吧: 手机的尺寸: 屏幕对角线的长度,单位为英寸(2.54cm) 手机的分辨率:屏幕能显示的像素的数量, 一般用在长方向上数量*宽方向上数量来表达,即...

先来说说基本的概念吧:

手机的尺寸: 屏幕对角线的长度,单位为英寸(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为1

px: 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”