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

分辨率,屏幕尺寸,屏幕密度,dp,px,sp

程序员文章站 2022-05-23 23:29:01
...

我们在做UI时候经常遇到这几个概念,但是就是不知道他们之间的关系,这篇文章将会解惑。

像素:显示图像的基本单元,单位px

分辨率:是纵横向上的像素点数,单位是px,比如1920*1080说的是纵向有1920个像素点,横向有1080个像素点。

屏幕尺寸:是手机屏幕对角线的长度,单位为英寸。
分辨率,屏幕尺寸,屏幕密度,dp,px,sp

屏幕像素密度:每单位的像素的点数,简称PPI(Pixels Per Inch),单位dpi(Dots Per Inch)。

上述的关系为:
屏幕的像素密度=√(分辨率高² + 分辨率宽²)÷ 屏幕尺寸
例如:
分辨率,屏幕尺寸,屏幕密度,dp,px,sp

那我们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的素材又是什么意思呢?
见如下图:
分辨率,屏幕尺寸,屏幕密度,dp,px,sp
参考资料:
今日头条适配方案
支持不同的像素密度