【我的安卓第一课】Android 单位系统
今天 00:51
字数 2286
阅读 5
1. 引言
Android 设备作为一种特殊的嵌入式设备,其经常需要接入屏幕进行画面渲染,然后由于屏幕的多样性,并且需要渲染的内容也多种多样,Android 为此设计了许多单位,来更好的处理各种各样的View渲染
2. 单位

2.1. dp (Density-independent Pixels)
- 定义:dp 是与屏幕密度无关的抽象单位,也称
dip。它被设计用来让 UI 元素在不同密度的屏幕上看起来大小一致。 - 用途:主要用于布局文件中定义宽度、高度、边距等尺寸属性。
出现这个单位也很好想到,比如同样是1080P,有的可以达到26寸(比如PC显示屏),有的却只有7寸(比如手机屏)。为了保证视觉效果一致,才出现的此单位。
不要和
dpi(Dots Per Inch,每英寸点数)混淆
2.2. in (Inches)
- 定义:英寸,基于屏幕物理尺寸的单位。
- 用途:很少使用,因为现代移动设备的尺寸变化范围大,难以提供一致的用户体验。
该单位基本用于衡量屏幕大小,很少用于编程 (英制单位的换算也很令人难蚌)
2.3. mm (Millimeters)
- 定义:毫米,同样基于屏幕物理尺寸。
- 用途:类似于英寸,不常用。
和英寸一样,不过变成了公制单位
2.4. pt (Points)
- 定义:点,1/72英寸。
- 用途:也不常用,通常用于特定的设计需求。
英寸的1/72,缩小版英寸(误
2.5. px (Pixels)
- 定义:物理像素点,直接对应屏幕上的实际像素数。
- 用途:不建议在大多数情况下使用px,因为它会导致在不同密度的设备上显示效果差异很大。
以所占像素数为单位,算是见的最多的单位之一,平时说的 1920x1080,2560x1440 指的就是长和宽的像素数。一般用于衡量分辨率。但
2.6. sp (Scale-independent Pixels)
- 定义:sp 是 一种特殊的 dp 单位,但它还考虑了用户的字体大小偏好设置。这意味着使用sp作为字体大小单位可以让文本自动适应用户对字体大小的调整。(被SP控制的字体,可以通过系统整体控制字体大小时)
- 用途:主要用于TextView等控件中的字体大小设定。
sp 是一种专用于字体的 dp单位。
2.7. 总结
一般来说,我们都是使用dp,sp,某些特殊需求可能使用px。其余的使用的就很稀少了。
屏幕密度为160时,1dp=1sp=1px
3. 相互转换
可以通过获取density进行 dp 与 px 的互换
public int dp2px(int dp, Context context) {
float density = context.getResources().getDisplayMetrics().density;
return Math.round(dp * density);
}
public int px2dp(int px, Context context) {
float density = context.getResources().getDisplayMetrics().density;
return Math.round(px / density);
}
可以通过获取scaledDensity进行 sp 与 px 的互换
public int sp2px(int sp, Context context) {
float scaledDensity = context.getResources().getDisplayMetrics().scaledDensity;
return Math.round(sp * scaledDensity);
}
public int px2sp(int px, Context context) {
float scaledDensity = context.getResources().getDisplayMetrics().scaledDensity;
return Math.round(px / scaledDensity);
}
4. 附录
在 Android 中,可根据像素密度触发自动加载不同的资源,如下表所示,100 dp 在不同
| 设备 DPI | 计算公式 | 实际像素宽度 |
|---|---|---|
| mdpi (160) | 100 × (160/160) | 100px |
| hdpi (240) | 100 × (240/160) | 150px |
| xhdpi (320) | 100 × (320/160) | 200px |
| xxhdpi(480) | 100 × (480/160) | 300px |
比如,一个 100 px的按钮 设备 A:手机(xxhdpi 屏幕,480 dpi)
- 屏幕密度高 → 每英寸有更多像素。
- 使用
100px宽度的按钮 → 实际占据空间较小。 - 结果:按钮看起来 很小,用户难以点击,应该占据300px
设备 B:平板(mdpi 屏幕,160 dpi)
- 屏幕密度低 → 每英寸像素较少。
- 同样使用
100px宽度的按钮 → 占据的空间较大。 - 结果:按钮看起来 很大,破坏整体界面美观。
不过有时候只关注单位也是不够的,在不同的设备上,往往也需要设计不同的布局
本文转自 https://juejin.cn/post/7527865199861743643,如有侵权,请联系删除。
0人点赞>
0 条评论
排序方式
时间
投票
快来抢占一楼吧
请登录后发表评论
相关推荐
文章归档
最新文章
最受欢迎
今天 01:12
今天 01:06
今天 01:04
今天 00:59
今天 00:55
6 评论
3 评论
1 评论
0 评论