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


当前回答

dpi 每英寸点

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

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

其他回答

定义

px 或 dot 是物理屏幕上的像素。

dpi 是物理屏幕上的每英寸像素,代表屏幕密度。

Android 给多种密度的 alias 名称

ldpi (低) ~120dpi mdpi (中) ~160dpi hdpi (高) ~240dpi 大多数设备在2015年在这里 xhdpi (超高) ~320dpi Apple iPhone 4/5/6, Nexus 4 xxhdpi (超高) ~480dpi Nexus 5 xxxhdpi (超高) ~640dpi

dip 或 dp 是密度依赖的像素,即它们根据物理密度相当于多或少的像素。

1dp = 1px 在 mdpi 上

此分類上一篇

sp 或 sip 是尺寸独立的像素,它们在“大文本”选项在“设置” >“可用性”中启动时进行尺寸。

1sp = 1dp 1sp = 1.2dp 可用性 大文本

用什么?

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

此分類上一篇

单元转换的公式

 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);        
   }
}

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

Android px、dp、sp

像素 px (绝对绝对) 密度独立的像素 dp, dip - 允许你不依赖像素,并在屏幕上有相同的结果不同像素每英寸 尺寸独立的像素 sp, sip - 相同的像素 dp 但为字体

[iOS 像素 vs 点 vs 单位]

我将详细介绍如何准确地将 dp 转换为 px:

如果在 mdpi 设备上运行,150 x 150 px 图像将占屏幕空间的 150 * 150 dp. 如果在 hdpi 设备上运行,150 x 150 px 图像将占屏幕空间的 100 * 100 dp. 如果在 xhdpi 设备上运行,150 x 150 px 图像将占屏幕空间的 75 * 75 dp.

相反的方式:说,你想添加一个图像到你的应用程序,你需要它填写一个100 * 100dp控制。

100 * 100 px 图像为 mdpi 150 * 150 px 图像为 hdpi 200 * 200 px 图像为 xhdpi