测量单位 px、dip、dp 和 sp 的区别是什么?
当前回答
我想提供一个简单的方式来理解 dp. 事实上,我认为 dp 是最容易理解的. dp 只是一个物理长度单位. 它与 mm 或 inch 相同的尺寸. 它只是方便我们写 50dp, 60dp 而不是 50/160 英寸或 60/160 英寸,因为一个 dp 只是 1/160 英寸,无论屏幕大小或分辨率是什么。
唯一的问题是,某些屏幕的Android dpi不准确,例如,分为160dpi的屏幕可能有170dpi。
其他回答
您可以从下图中看到 px 和 dp 的差异,您也可以发现 px 和 dp 无法在不同屏幕上保证相同的物理尺寸。
此分類上一篇
Android px、dp、sp
像素 px (绝对绝对) 密度独立的像素 dp, dip - 允许你不依赖像素,并在屏幕上有相同的结果不同像素每英寸 尺寸独立的像素 sp, sip - 相同的像素 dp 但为字体
[iOS 像素 vs 点 vs 单位]
定义
px 或 dot 是物理屏幕上的像素。
dpi 是物理屏幕上的每英寸像素,代表屏幕密度。
Android 给多种密度的 alias 名称
ldpi (低) ~120dpi mdpi (中) ~160dpi hdpi (高) ~240dpi 大多数设备在2015年在这里 xhdpi (超高) ~320dpi Apple iPhone 4/5/6, Nexus 4 xxhdpi (超高) ~480dpi Nexus 5 xxxhdpi (超高) ~640dpi
dip 或 dp 是密度依赖的像素,即它们根据物理密度相当于多或少的像素。
1dp = 1px 在 mdpi 上
此分類上一篇
sp 或 sip 是尺寸独立的像素,它们在“大文本”选项在“设置” >“可用性”中启动时进行尺寸。
1sp = 1dp 1sp = 1.2dp 可用性 大文本
用什么?
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
来源1
来源2
源3(源3的数据如下)
这些是尺寸值定义在XML. 一个尺寸是指一个数字跟随一个尺寸单位. 例如: 10px, 2in, 5sp. 以下尺寸单位是由Android支持:dp 密度独立的像素 - 一个抽象单位,基于屏幕的物理密度. 这些单位是相对的160dpi(点每英寸)屏幕,在其中1dp是相当于1px
注意: 一个尺寸是一个简单的资源,使用在名称属性中提供的值(而不是 XML 文件的名称)。 因此,您可以在一个 XML 文件中将尺寸资源与其他简单的资源相结合,在一个元素下。
推荐文章
- 警告: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文件