持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第5天,点击查看活动详情
我们之前写了简单的TextView 示例,那么有些熟悉我们直接拿来就使用了,今天我们来说一下,有些属性中的细节部分。比如我们来设置文本字体大小的一个尺寸问题。
文本字体尺寸
首先有过前端基础的很了解我们最熟悉的就是 PX 这个尺寸单位,那么接下来就是 rem 和 em 这两个尺寸单位。那么在安卓端我们前面的示例中用到的是 dp 这个尺寸单位。我们先来通俗的看一下他们之间的关系。
Pixel
像素,也可以称之为图像元素。它是作为图像构成的基本单元,单个像素的大小并不固定,它是跟着屏幕的大小和像素数量的关系变化的,一个像素点就是 1px。
Resolution
分辨率,它是指屏幕的垂直和水平方向的像素数量,就比如我们的分辨率为1920 * 1080,那么就是说垂直方向有1920个像素,而水平方向有1080个像素。
Dpi
像素密度,它是指屏幕上每英寸(1英寸 = 2.54cm)距离中有多少给像素点。
Density
密度,它是指屏幕上每平方英尺中包含了多少个像素点的单位。
dp
设备独立像素,同一个单位在不同设备上显示的效果不一样,因为其效果是和设备的密度有关。
下面我们来说一下他们之间的关系。以我创建的这个虚拟机为例,它是一个6.4英寸 2400px * 1080px 的Pixel6手机。
那么它的 dpi 的计算方法为:首先计算出斜边的长度,再以斜边的长度 除以 英寸 数,得到dpi
- 利用勾股定理,斜边的长度为 2400^2 + 1080^2 = 2631^2
- 2631 / 6.4 = 411
那么它的密度Density 也就等于 411^2 = 168,998
下面我们来看比较重要的 dp,因为在屏幕上显示的东西最终都会一像素的形式显示,所以我们写的dp其其目的是通过机器帮我们转换成px,那么他们的计算方式是什么样的,了解了它才能在以后做适配的时候得心应手。 在安卓中规定以160dpi 分辨率为 320* 480为基准 1px = 1dp。
计算公式 1dp = (dpi / 160)px
根据公式可以算我们出虚拟机 1dp = 2.5px
需要注意的是dp为长度单位,可以用以TextView的长度控制。在安卓中还有个单位sp, scale-independent pixel,它的原理与dp相似,但它是专门来设置文字的大小的,以便于在手机系统中调整设置了文字大小之后,应用可以跟随系统大小变换字体大小。
最后我们来总结一下各单位之间的关系
| 单位 | 描述 |
|---|---|
| px | 手机屏幕的最小显示单位,与设备的显示屏相关 |
| dp | 与设备无关的显示单位,与屏幕尺寸相关 |
| sp | 专门用来设置文字大小的,可跟随系统的文字大小调整 |