分辨率,屏幕尺寸,屏幕密度,dp,px,sp
程序员文章站
2022-05-23 23:29:01
...
我们在做UI时候经常遇到这几个概念,但是就是不知道他们之间的关系,这篇文章将会解惑。
像素:显示图像的基本单元,单位px
分辨率:是纵横向上的像素点数,单位是px,比如1920*1080说的是纵向有1920个像素点,横向有1080个像素点。
屏幕尺寸:是手机屏幕对角线的长度,单位为英寸。
屏幕像素密度:每单位的像素的点数,简称PPI(Pixels Per Inch),单位dpi(Dots Per Inch)。
上述的关系为:
屏幕的像素密度=√(分辨率高² + 分辨率宽²)÷ 屏幕尺寸。
例如:
那我们Android中的dp和sp与上面的概念有什么关系呢?
dp:Android引入了密度无关像素 (dp) 作为度量单位来设计界面。dp 是一个虚拟像素单位,1 dp 约等于中密度屏幕(160dpi;“基准”密度)上的 1 像素。对于其他每个密度,Android 会将此值转换为相应的实际像素数。
px = dp * (dpi(屏幕的像素密度) / 160)
sp:为缩放后的字体的单位,我们不能在布局中使用它,我们通常在设置字体大小中使用。
px = sp(scaleDpi)*
代码的位置为:
public class TypedValue {
public static float applyDimension(int unit, float value,
DisplayMetrics metrics) {
switch (unit) {
case COMPLEX_UNIT_PX:
return value;
case COMPLEX_UNIT_DIP:
return value * metrics.density;
case COMPLEX_UNIT_SP:
return value * metrics.scaledDensity;
case COMPLEX_UNIT_PT:
return value * metrics.xdpi * (1.0f/72);
case COMPLEX_UNIT_IN:
return value * metrics.xdpi;
case COMPLEX_UNIT_MM:
return value * metrics.xdpi * (1.0f/25.4f);
}
return 0;
}
}
我们适配图片时候常常会涉及到xxhdrawable的素材又是什么意思呢?
见如下图:
参考资料:
今日头条适配方案
支持不同的像素密度