【我的安卓第一课】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,因为它会导致在不同密度的设备上显示效果差异很大。

以所占像素数为单位,算是见的最多的单位之一,平时说的 1920x10802560x1440 指的就是长和宽的像素数。一般用于衡量分辨率。但

2.6. sp (Scale-independent Pixels)

  • 定义:sp 是 一种特殊的 dp 单位,但它还考虑了用户的字体大小偏好设置。这意味着使用sp作为字体大小单位可以让文本自动适应用户对字体大小的调整。(被SP控制的字体,可以通过系统整体控制字体大小时)
  • 用途:主要用于TextView等控件中的字体大小设定。

sp 是一种专用于字体的 dp单位。

2.7. 总结

一般来说,我们都是使用dpsp,某些特殊需求可能使用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 条评论
排序方式 时间 投票
快来抢占一楼吧
请登录后发表评论