测量单位 px、dip、dp 和 sp 的区别是什么?
当前回答
px - 一个像素,相同于什么在CSS,JavaScript,等使用 sp - 规模独立的像素 dip - 密度独立的像素
通常 sp 用于字体大小,而 dip 用于其他人(也称为 dp)。
其他回答
dp-to-pixel 比例与屏幕密度相匹配,但不一定是直接比例。
注意:编辑器接受“dip”和“dp”,尽管“dp”与“sp”更一致。
尺寸独立的Pixels - 这类似于dp单元,但它也按用户的字体大小偏好进行尺寸。
由官方文档复制的答案所列的 dp 和 sp 单元之间的差异可以通过更改“设置”>“可用性”>“长文本”选项在运行时看到。
大文本选项使文本变成1.3倍。
private static final float LARGE_FONT_SCALE = 1.3f;
这可能当然是供应商依赖的,因为它在包 / 应用程序 / 设置。
下面是Android使用的公式:
px = dp * (dpi / 160)
在哪里 dpi 是下列屏幕密度之一. 所有可能的密度列表请参阅这里
它定义了“DENSITY_*”的恒例。
ldpi (低) ~120dpi mdpi (中) ~160dpi hdpi (高) ~240dpi xhdpi (超高) ~320dpi xxhdpi (超高) ~480dpi xxxhdpi (超高) ~640dpi
从这里拿出来。
这将解决很多混乱,当翻译在px和dp之间,如果你知道你的屏幕dpi。
所以,让我们说你想要一个图像60dp的HDPI屏幕,然后物理像素大小60dp是:
px = 60 * (240 / 160)
我想提供一个简单的方式来理解 dp. 事实上,我认为 dp 是最容易理解的. dp 只是一个物理长度单位. 它与 mm 或 inch 相同的尺寸. 它只是方便我们写 50dp, 60dp 而不是 50/160 英寸或 60/160 英寸,因为一个 dp 只是 1/160 英寸,无论屏幕大小或分辨率是什么。
唯一的问题是,某些屏幕的Android dpi不准确,例如,分为160dpi的屏幕可能有170dpi。
一个虚拟像素单位,你应该在定义UI布局时使用,以以密度独立的方式表达布局尺寸或位置。 如上所述,密度独立的像素相当于160dpi屏幕上的一个物理像素,这是系统对“中间”密度屏幕所承认的基密度。
dp = px * 160 / dpi
MDPI = 160 dpi || Therefore, on MDPI 1 px = 1 dp
For example, if you want to convert 20 pixel to dp, use the above formula,
dp = 20 * 160 / 160 = 20.
So, 20 pixel = 20 dp.
HDPI = 240 dpi - So, on HDPI 1.5 px = 1 dp
XHDPI = 320 dpi - So, on XHDPI 2 px = 1 dp
XXHDPI = 480 dpi - So, on XXHDPI 3 px = 1 dp
For example, let us consider Nexus 4.
If 24 pixels to be converted to dp and if it is a Nexus 4 screen, developers can
convert it to dp easily by the following calculation :
dp = 24 * 160 / 320 = 12 dp
Screen dimension:
768 x 1280 pixel resolution (320 ppi or 320dpi)
Optional (screen size):
4.7" diagonal
尝试从创意团队获得所有像素值的数字,否则准确性损失会发生,同时加倍为0.5。
SP
使用 sp 为字体大小. 然后只有在应用程序内部的字体会改变,而设备字体大小会改变(即显示 -> 字体在设备上)。 如果你想在应用程序内部保持静态字体大小,你可以给字体大小在 dp. 在这种情况下,它永远不会改变。
推荐文章
- 警告: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文件