测量单位 px、dip、dp 和 sp 的区别是什么?
当前回答
计算像素密度
密度独立性
屏幕像素密度和分辨率取决于平台,设备独立的像素和可扩展的像素是提供一个灵活的方式,以适应整个平台的设计。
计算像素密度 匹配英寸的像素数量被称为像素密度. 高密度屏幕每英寸比低密度的像素多。
密度独立的像素,写作为dp(发音为“dips”),是灵活的单位,规模在任何屏幕上均匀的尺寸。
低密度屏幕显示与密度独立高密度屏幕显示与密度独立
其他回答
由官方文档复制的答案所列的 dp 和 sp 单元之间的差异可以通过更改“设置”>“可用性”>“长文本”选项在运行时看到。
大文本选项使文本变成1.3倍。
private static final float LARGE_FONT_SCALE = 1.3f;
这可能当然是供应商依赖的,因为它在包 / 应用程序 / 设置。
我已经计算了下面的公式,以便将 dpi 转换为 dp 和 sp
sp = 尺寸独立像素
dpi = 密度像素
sp 接收设备的文本大小,而 dp 接收设备密度标准(不会在设备中改变) 说 100sp 文本可以占用屏幕的 80% 或屏幕的 100% 取决于设备中设置的字体大小
使用 sp 和 dp 为 UX 考虑的文本大小。
此外,请注意,人们在手机上使用自定义字体,因此缺乏字体可能会导致空间和所有问题。 说文本大小12sp为自定义字体可能需要一些比默认字体额外的像素。
单元转换的公式
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);
}
}
更多信息请参阅下面的链接。
计算像素密度
密度独立性
屏幕像素密度和分辨率取决于平台,设备独立的像素和可扩展的像素是提供一个灵活的方式,以适应整个平台的设计。
计算像素密度 匹配英寸的像素数量被称为像素密度. 高密度屏幕每英寸比低密度的像素多。
密度独立的像素,写作为dp(发音为“dips”),是灵活的单位,规模在任何屏幕上均匀的尺寸。
低密度屏幕显示与密度独立高密度屏幕显示与密度独立
推荐文章
- 改变开关的“开”色
- 以编程方式将EditText的输入类型从PASSWORD更改为NORMAL,反之亦然
- 如何在隐藏和查看密码之间切换
- 在Android上调整一个大的位图文件到缩放输出文件
- 如何更改Android版本和代码版本号?
- Android Studio突然无法解析符号
- 应用程序重新启动而不是恢复
- 如何设置整个应用程序在纵向模式?
- Android中文本的阴影效果?
- 以编程方式设置TextView的布局权重
- Android -如何覆盖“后退”按钮,所以它不完成()我的活动?
- 如何从通知点击发送参数到一个活动?
- 导航目标xxx对于这个NavController是未知的
- 使用ConstraintLayout均匀间距的视图
- 文件google-services错误。模块根文件夹中缺少Json。谷歌服务插件没有它就不能正常工作。