单位和尺寸
为了适配不同屏幕,指定控件和布局大小时最好用
match_parent和wrap_content,尽量别写死宽高。真要固定值时,布局里常用px、pt、dp、sp。前两个在手机上很容易「一块屏一个样」。
一、px 和 pt:PC 好用,手机吃力
px 是像素,屏幕能显示的最小单元。单个像素肉眼几乎看不见,聚在一起才组成界面。pt 是磅,1 磅 = 1/72 英寸,常当字体单位。
在 PC 上用 px / pt 很顺手;到手机上分辨率五花八门:200px 宽的按钮在低分屏可能近乎满屏,高分屏可能只占一半。把 activity_main.xml 改成:
android:layout_width 写成 200px 后,再在 240×320 的低分辨率模拟器上跑一遍,同样 200px 的观感完全不同。pt 和 px 情况类似,所以这两个单位在手机上很难当默认尺寸。
二、dp 和 sp:跟密度走
Google 为此引入 dp(density-independent pixel,也叫 dip)和 sp(scale-independent pixel)。dp 在不同密度屏幕上显示比例更一致;sp 用同一套思路解决文字大小,并会随用户字体缩放。
密度是每英寸像素数,单位 dpi。屏幕宽 2 英寸、长 3 英寸:分辨率 320×480 时密度约 160dpi;640×960 时约 320dpi。密度越高,画面越精细。可在 onCreate() 里打印当前密度:
按 Android 约定:160dpi 上 1dp = 1px,320dpi 上 1dp = 2px。用 dp 指定宽高,控件在不同密度上的视觉比例才能稳住。把按钮宽度改成 200dp:
若模拟器刚好是 160dpi,这时 1dp = 1px,看起来会和 200px 几乎一样;换到低密度模拟器,dp 的优势才会明显。
| 单位 | 含义 | 手机上怎么用 |
|---|---|---|
| px | 物理像素 | 少写死;同 px 在不同分辨率上占比差很大 |
| pt | 磅,1/72 英寸 | 传统字体单位,手机适配同样吃力 |
| dp / dip | 密度无关像素 | 控件宽高首选;160dpi 时 1dp=1px |
| sp | 可伸缩像素 | 文字大小首选,可跟系统字体缩放 |
三、换算关系
更细的 px ↔ dp 换算可以看:Android Dimension 转换算法原理分析。日常记忆:优先 match_parent / wrap_content;非写固定值不可时,控件用 dp,字号用 sp。
一句话总结:px/pt 跟物理像素绑死,换分辨率就变形;控件用 dp、文字用 sp,才能在不同密度上保持差不多的视觉大小。
转载请注明来源:单位和尺寸







