测量单位 px、dip、dp 和 sp 的区别是什么?
当前回答
我已经计算了下面的公式,以便将 dpi 转换为 dp 和 sp
其他回答
单元转换的公式
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将所有实际的屏幕大小组成四个通用大小:小,正常,大,和超大。 屏幕密度 屏幕的物理区域内的像素数量; 通常称为dpi(点每英寸)。 例如,一个“低”密度屏幕在特定物理区域内有较少的像素,比较
当添加多个屏幕支持时,应用程序不直接与分辨率工作;应用程序应仅涉及屏幕大小和密度,如一般化大小和密度组所规定的。
屏幕尺寸和密度
我遇到了一篇关于设计不同屏幕分辨率的Android应用程序UI的好文章,我想把它留在这里,只是在这个领域寻找的人。 是的,我知道它在某种程度上被描述在谷歌文件(并在上面的帖子中提到),我读到它,但它对我来说并不好(是的,我可能太愚蠢)。
您可以从下图中看到 px 和 dp 的差异,您也可以发现 px 和 dp 无法在不同屏幕上保证相同的物理尺寸。
此分類上一篇
PX(像素):
DP / DIP(密度像素 / 密度独立像素):
dip == dp. 在以前的Android版本中,dip 被使用,后来更改为dp. 这是 px 的替代品. 一般情况下,我们从来不使用 px 因为它是绝对值. 如果您使用 px 设置宽度或高度, 如果该应用程序正在下载到不同的屏幕大小设备,那么该视图不会扩展到屏幕的原始大小。
SP(尺寸独立像素):
基于用户的字体大小偏好,字体应该使用 sp. 当提到字体大小适合不同的屏幕大小时,使用 sp. 这类似于 dp.Use sp 特别是字体大小以生长 & 缩小动态基于屏幕大小
Android Documentation 說:
推荐文章
- 警告:API ' variable . getjavacompile()'已过时,已被' variable . getjavacompileprovider()'取代
- 安装APK时出现错误
- 碎片中的onCreateOptionsMenu
- TextView粗体通过XML文件?
- 如何使线性布局的孩子之间的空间?
- DSL元素android.dataBinding。enabled'已过时,已被'android.buildFeatures.dataBinding'取代
- ConstraintLayout:以编程方式更改约束
- PANIC: AVD系统路径损坏。检查ANDROID_SDK_ROOT值
- 如何生成字符串类型的buildConfigField
- Recyclerview不调用onCreateViewHolder
- Android API 21工具栏填充
- Android L中不支持操作栏导航模式
- 如何在TextView中添加一个子弹符号?
- PreferenceManager getDefaultSharedPreferences在Android Q中已弃用
- 在Android Studio中创建aar文件