测量单位 px、dip、dp 和 sp 的区别是什么?
当前回答
dp-to-pixel 比例与屏幕密度相匹配,但不一定是直接比例。
注意:编辑器接受“dip”和“dp”,尽管“dp”与“sp”更一致。
尺寸独立的Pixels - 这类似于dp单元,但它也按用户的字体大小偏好进行尺寸。
其他回答
来自Android开发者文档:
px 像素 - 符合屏幕上的实际像素. 在英寸 - 基于屏幕的物理尺寸. 1 英寸 OR 2.54 厘米 mm > 毫米 - 基于屏幕的物理尺寸. pt > 点 - 1/72 英寸基于屏幕的物理尺寸. dp 或 dip > 密度独立的像素 - 基于屏幕的物理密度的抽象单位。
从了解密度独立在Android:
Density Bucket | Screen Density | Physical Size | Pixel Size |
---|---|---|---|
ldpi | 120 dpi | 0.5 x 0.5 in | 0.5 in * 120 dpi = 60x60 px |
mdpi | 160 dpi | 0.5 x 0.5 in | 0.5 in * 160 dpi = 80x80 px |
hdpi | 240 dpi | 0.5 x 0.5 in | 0.5 in * 240 dpi = 120x120 px |
xhdpi | 320 dpi | 0.5 x 0.5 in | 0.5 in * 320 dpi = 160x160 px |
xxhdpi | 480 dpi | 0.5 x 0.5 in | 0.5 in * 480 dpi = 240x240 px |
xxxhdpi | 640 dpi | 0.5 x 0.5 in | 0.5 in * 640 dpi = 320x320 px |
Unit | Description | Units Per Physical Inch | Density Independent? | Same Physical Size On Every Screen? |
---|---|---|---|---|
px | Pixels | Varies | No | No |
in | Inches | 1 | Yes | Yes |
mm | Millimeters | 25.4 | Yes | Yes |
pt | Points | 72 | Yes | Yes |
dp | Density Independent Pixels | ~160 | Yes | No |
sp | Scale Independent Pixels | ~160 | Yes | No |
更多信息也可以在Google设计文档中找到。
屏幕大小 实际的物理大小,测量为屏幕的直径. 为了简单,Android将所有实际的屏幕大小组成四个通用大小:小,正常,大,和超大。 屏幕密度 屏幕的物理区域内的像素数量; 通常称为dpi(点每英寸)。 例如,一个“低”密度屏幕在特定物理区域内有较少的像素,比较
当添加多个屏幕支持时,应用程序不直接与分辨率工作;应用程序应仅涉及屏幕大小和密度,如一般化大小和密度组所规定的。
屏幕尺寸和密度
计算像素密度
密度独立性
屏幕像素密度和分辨率取决于平台,设备独立的像素和可扩展的像素是提供一个灵活的方式,以适应整个平台的设计。
计算像素密度 匹配英寸的像素数量被称为像素密度. 高密度屏幕每英寸比低密度的像素多。
密度独立的像素,写作为dp(发音为“dips”),是灵活的单位,规模在任何屏幕上均匀的尺寸。
低密度屏幕显示与密度独立高密度屏幕显示与密度独立
Android px、dp、sp
像素 px (绝对绝对) 密度独立的像素 dp, dip - 允许你不依赖像素,并在屏幕上有相同的结果不同像素每英寸 尺寸独立的像素 sp, sip - 相同的像素 dp 但为字体
[iOS 像素 vs 点 vs 单位]
单元转换的公式
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 Studio中改变矢量资产的填充颜色
- 在构建中编写注释的语法是什么?gradle文件?
- 如何以编程方式添加按钮色调
- 用Android Studio进行调试永远停留在“等待调试器”状态
- Openssl不被视为内部或外部命令
- 无法执行dex:在Eclipse中超过GC开销限制
- 如何以编程方式将视图添加到视图
- 单击url会打开默认浏览器
- 使用Retrofit刷新OAuth令牌,而不修改所有调用
- 多个dex文件定义了landoid /support/v4/accessibilityservice/AccessibilityServiceInfoCompat
- 如何获得动作栏的高度?
- 从活动外部调用startActivity() ?
- createScaledBitmap的过滤器参数做什么?
- 为什么我在使用adb时访问数据文件夹被拒绝?
- 如何确定Android设备的GPS是否已启用