测量单位 px、dip、dp 和 sp 的区别是什么?


当前回答

我遇到了一篇关于设计不同屏幕分辨率的Android应用程序UI的好文章,我想把它留在这里,只是在这个领域寻找的人。 是的,我知道它在某种程度上被描述在谷歌文件(并在上面的帖子中提到),我读到它,但它对我来说并不好(是的,我可能太愚蠢)。

其他回答

dpi 每英寸点

同样,如果你有两个相似的屏幕大小,但不同的像素密度,说一个是800到1280像素(320dpi),而另一个是400到640像素(160dpi),我们不需要定义完全不同的布局为这两个设备,因为我们可以测量资产的密度独立像素,这是相同的两个设备。

尺寸独立的像素(sp)是字体大小的偏好单位. 为了可用性,Android允许用户自定义他们的设备的字体大小. 有问题阅读文本的用户可以增加他们的设备的字体大小. 你通常可以在显示设置在你的手机或平板电脑的字体大小下找到这个选项. 它经常也通过可用性设置可用。

您可以从下图中看到 px 和 dp 的差异,您也可以发现 px 和 dp 无法在不同屏幕上保证相同的物理尺寸。

此分類上一篇

我已经计算了下面的公式,以便将 dpi 转换为 dp 和 sp

基本上,唯一适用的 px 时间是 1 px,如果您想要屏幕上的一个像素,就像在分配器的情况下一样:

在 > 160 dpi 上,您可以获得 2-3 像素,

在 > 120 dpi 中,它旋转到 0.

单元转换的公式

 px = dp * (dpi / 160)

dp 到 px 在设备上

下面的例子可能有助于更好地理解。 尺寸是基于120(ldpi)、160(mdpi)、240(hdpi)、320(xhdpi)、480(xxhdpi)、640(xxxhdpi)。 谷歌建议的设计比例为3:4:6:8:12 ldpi:mdpi:hdpi:xhdpi:xxhdpi。

150px X 150px 图像将占据,

您可以使用下面的 DPI 计算器来调整图像大小和其他尺寸,当您希望在所有 Android 设备上具有统一的 UI 设计时。

/*
Program output
LDPI: 165.0 X 60.0
MDPI: 220.0 X 80.0
HDPI: 330.0 X 120.0
XHDPI: 440.0 X 160.0
XXHDPI: 660.0 X 240.0
XXXHDPI: 880.0 X 320.0
*/


public class DPICalculator {

private final float LDPI = 120;
private final float MDPI = 160;
private final float HDPI = 240;
private final float XHDPI = 320;
private final float XXHDPI = 480;
private final float XXXHDPI = 640;    

private float forDeviceDensity;
private float width;
private float height;

public DPICalculator(float forDeviceDensity, float width, float height){
    this.forDeviceDensity = forDeviceDensity;
    this.width = width;
    this.height = height;
}

public static void main(String... args) {
    DPICalculator dpiCalculator = new DPICalculator(240,330,120);
    dpiCalculator.calculateDPI();
}


private float getPx(float dp, float value) {
    float px = dp * (value / forDeviceDensity );        
    return px;
}

private void calculateDPI() {

    float ldpiW = getPx(LDPI,width);        
    float ldpiH =  getPx(LDPI,height);
    float mdpiW = getPx(MDPI,width);        
    float mdpiH =  getPx(MDPI,height);        
    float hdpiW = getPx(HDPI,width);        
    float hdpiH =  getPx(HDPI,height);       
    float xdpiW = getPx(XHDPI,width);        
    float xdpiH =  getPx(XHDPI,height);
    float xxdpiW = getPx(XXHDPI,width);        
    float xxdpiH =  getPx(XXHDPI,height);
    float xxxdpiW = getPx(XXXHDPI,width);        
    float xxxdpiH =  getPx(XXXHDPI,height);
    
    System.out.println("LDPI: " + ldpiW + " X " + ldpiH);
    System.out.println("MDPI: " + mdpiW + " X " + mdpiH);
    System.out.println("HDPI: " + hdpiW + " X " + hdpiH);
    System.out.println("XHDPI: " + xdpiW + " X " + xdpiH);
    System.out.println("XXHDPI: " + xxdpiW + " X " + xxdpiH);
    System.out.println("XXXHDPI: " + xxxdpiW + " X " + xxxdpiH);        
   }
}

更多信息请参阅下面的链接。