测量单位 px、dip、dp 和 sp 的区别是什么?
当前回答
PX(像素):
DP / DIP(密度像素 / 密度独立像素):
dip == dp. 在以前的Android版本中,dip 被使用,后来更改为dp. 这是 px 的替代品. 一般情况下,我们从来不使用 px 因为它是绝对值. 如果您使用 px 设置宽度或高度, 如果该应用程序正在下载到不同的屏幕大小设备,那么该视图不会扩展到屏幕的原始大小。
SP(尺寸独立像素):
基于用户的字体大小偏好,字体应该使用 sp. 当提到字体大小适合不同的屏幕大小时,使用 sp. 这类似于 dp.Use sp 特别是字体大小以生长 & 缩小动态基于屏幕大小
Android Documentation 說:
其他回答
Android px、dp、sp
像素 px (绝对绝对) 密度独立的像素 dp, dip - 允许你不依赖像素,并在屏幕上有相同的结果不同像素每英寸 尺寸独立的像素 sp, sip - 相同的像素 dp 但为字体
[iOS 像素 vs 点 vs 单位]
dpi -
每英寸点 测量屏幕的像素密度。
px - 像素
编写屏幕像素
点 - 点
约 1/72 英寸,与物理屏幕大小相比。
在 - 英寸 - 至物理屏幕大小(1 英寸 = 2.54 厘米)。
mm - 毫米 - 与物理屏幕大小有关。
sp - 尺寸独立的像素。
基于用户的字体大小偏好,字体应该是“sp”。
迪普 -
dip = dp 密度独立的像素. 它根据屏幕密度而异. 在 160 dpi 屏幕上, 1 dp = 1 像素. 使用 dp 除了文本字体大小。
在标准情况下,dp 和 sp 用于字体大小 sp 和 dp 用于其他任何东西。
单元转换的公式:
px = dp * (dpi / 160 );
Density Bucket -> Screen Display => 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
计算像素密度
密度独立性
屏幕像素密度和分辨率取决于平台,设备独立的像素和可扩展的像素是提供一个灵活的方式,以适应整个平台的设计。
计算像素密度 匹配英寸的像素数量被称为像素密度. 高密度屏幕每英寸比低密度的像素多。
密度独立的像素,写作为dp(发音为“dips”),是灵活的单位,规模在任何屏幕上均匀的尺寸。
低密度屏幕显示与密度独立高密度屏幕显示与密度独立
来源1
来源2
源3(源3的数据如下)
这些是尺寸值定义在XML. 一个尺寸是指一个数字跟随一个尺寸单位. 例如: 10px, 2in, 5sp. 以下尺寸单位是由Android支持:dp 密度独立的像素 - 一个抽象单位,基于屏幕的物理密度. 这些单位是相对的160dpi(点每英寸)屏幕,在其中1dp是相当于1px
注意: 一个尺寸是一个简单的资源,使用在名称属性中提供的值(而不是 XML 文件的名称)。 因此,您可以在一个 XML 文件中将尺寸资源与其他简单的资源相结合,在一个元素下。
dp 是 dip. 使用它为一切(边缘,粘贴等)。
只用 sp 为 {text-size}。
为了在不同的屏幕密度上获得相同的尺寸,Android在运行时间中将这些单元翻译成像素,所以没有什么可怕的数学。
在不同屏幕大小上看到 px、dp 和 sp 的差异。
此分類上一篇
来源:Android编程:The Big Nerd Ranch 指南
推荐文章
- 警告: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文件