Mark Xu 的博客

记录精彩的程序人生

Android 手机屏幕那些事儿


最近公司的 Android 设备准备进行硬件升级,谈及屏幕时,大家对于相关的一些知识点具有不同的认知。因此我搜集了互联网上关于 Android 手机屏幕的相关资料,总结、记录、分享于此。

分辨率

屏幕尺寸

  • 屏幕尺寸指屏幕对角线的长度,单位:英寸
  • 1 英寸 = 2.54 厘米

屏幕比例

  • 屏幕比例为手机屏幕的纵横比(高宽比)
  • 屏幕比例值等于分辨率比例值,即 16 / 9 = 2560 / 1440
  • 当今智能手机主流屏幕比例为 16 : 9 约等于 1.7777777778
  • 2017 年开始火起来的全面屏比例为 18 : 9,如 2160 * 1080。
  • 也有非主流的:
屏幕比例 代表产品
1 : 1 黑莓 Passport、Motorola ME511
1 : 1 圆屏 Motorola Aura R1
4 : 3 LG Optimus Vu
3 : 2 iPhone4S
15 : 9 魅族 MX3
2 : 1 酷派 9930、坚果 Pro2
  • 屏幕尺寸相同的前提下:屏幕比例越大,屏幕越瘦越高,可视面积越小;反之越矮越胖越大

分辨率

  • 分辨率指屏幕在纵横向上的像素点数,单位 px,1px = 1 个像素点
  • 2560 * 1440 的屏幕即纵向有 2560 个像素点,横向有 1440 个像素点
  • 智能手机历史上的主流标准有:
电脑标准 分辨率 比例 代表产品
HVGA 480 * 320 3 : 2 三星 S5830
WVGA 800 * 480 5 : 3 中兴 V880
qHD 960 * 540 16 : 9 Moto XT910
HD 1280 * 720 16 : 9 小米 2S
Full HD 1920 * 1080 16 : 9 Moto X2
WQHD 2560 * 1440 16 : 9 Nexus 6
QFHD 3840 * 2160 16 : 9 Xperia Z5 Premium

像素密度

  • 像素密度指屏幕每英寸上的像素点数
  • 像素密度单位为:dpi 或 ppi,两者基本可以通用
  • dpi 即 dots per inch,用于打印或印刷领域,为描述打印物上每英寸上点的密度
  • ppi 即 pixels per inch,用于电脑显示领域,用于描述屏幕上每英寸上像素点的数量
  • 手机屏幕宽度(以英寸为单位) * ppi = 手机屏幕宽度上的像素点数
  • 如 Nexus6 的 2.92(inch) * 493(ppi) = 1440(px)

Android 中常见的像素密度

名称 范围 对应比例
mdpi 120dpi - 160dpi 1
hdpi 160dpi - 240dpi 1.5
xhdpi 240dpi - 320dpi 2
xxhdpi 320dpi - 480dpi 3
xxxhdpi 480dpi - 640dpi 4

屏幕适配

屏幕适配包括:

  • 支持不同的屏幕密度
  • 支持不同的屏幕尺寸

支持不同的屏幕密度

密度无关像素(dp、dip、sp)

  • dp 是 Density Independent Pixels 的缩写
  • Android 中,以 160dpi 为基准,1dp = 1px
  • 如果像素密度为 320dpi,此时 1dp = 2px
  • sp 即 Scale Independent Pixels,与 dp 类似,用于设置字体。以 160ppi 屏幕为标准,当字体大小为 100% 时, 1sp = 1px

如上图所示,屏幕尺寸大小相同,分辨率不同时:

  • 左图:1dp = 1.5px,屏幕宽度为 540px,即 360dp
  • 右图:1dp = 3px,屏幕宽度为 1080px,即 360dp
  • 所以使用 dp 作为单位进行适配,在两种分辨率下显示效果完全相同

计算公式 (待定?)

ppi = √(高度像素数² + 宽度像素数²) / 屏幕对角线英寸数

px = dp * ppi / 160
px = sp * ppi / 160

支持不同的屏幕尺寸

基础知识

  • (从 API13 已废弃)Android 中将所有实际屏幕尺寸分组为四种通用尺寸:小、 正常、大和超大。
  • Android 中将所有屏幕密度分组为六种通用密度: 低、中、高、超高、超超高和超超超高。

由上图可以看到,不同尺寸的屏幕:

  • 图一和图二:分辨率相同时,横向上的长度切换为 dp 后是不同的
  • 图一和图三:dpi 相同时,横向上的长度切换为 dp 后仍然不同
  • 即画一条 360 dp 长度的线,在图一上会占满整个宽,在图二或图三只会占 1/2
  • 所以我们需要对不同尺寸的屏幕进行适配,对于尺寸相差较大时应提供不同的布局,对于非主流的屏幕宽度 320dp 等进行单独布局

目前 Android 手机屏幕主流宽度为 360dp

适配规则

  • 使用 “wrap_content” 和 “match_parent”
  • 使用 ConstraintLayout
  • 使用尺寸限定符、最小宽度限定符、屏幕方向限定符
  • 使用点 9 图

不同的 drawable 文件夹

显示器的分辨率调节

相对于手机来说,我们调节电脑显示器的分辨率会更简单些。当我们将显示器的分辨率由 1920 * 1080 调节至 1280 * 720 时,会发现图标、文件都会变的更大。

我认为可以这样理解:

  • 物理尺寸代表屏幕上的显示尺寸,实际尺寸指图标的实际尺寸
  • 在 1920 * 1080 分辨率下,假设一个图标的实际尺寸为 40px * 40px
  • 切换为 1280 * 720 分辨率时,这个图标的实际尺寸并没有变化,依旧为 40px * 40px
  • 但是在 1280 * 720 分辨率下,由于每一英寸上的像素点数量变少了。显示 40px * 40px 的图标所占的物理尺寸就会变大
  • 因此屏幕像素密度越低,图片的物理尺寸会越大;像素密度越高,图片的物理尺寸越小

不同 drawable 文件夹下同一 Bitmap 的大小

接下来回归到手机端:

  • 放在 mdpi、hdpi、xhdpi、xxhdpi、xxxhdpi 这些文件夹下的图片,代表适配于该像素密度(dpi)的屏幕的图片
  • 当手机的像素密度为 xxhdpi 时,xxhdpi 文件夹下的图片默认会以实际尺寸加载到内存中
  • 当手机像素密度为 xxhdpi,并将图片放到 hdpi 文件夹下来进行加载时:由于该图片为适配 hdpi 密度的,直接展示在当前密度(xxhdpi)下会造成图片缩小,所以系统自动帮我们把图片进行放大,占用内存也同时变大
  • 系统寻找图片的顺序:当前屏幕密度文件夹 --> 更高密度文件夹 --> drawable-nodpi 无密度文件夹 --> 更低密度文件夹

颜色模式

16 位色、24 位色、32 位色

  • 屏幕上所展示的图片由像素点组成,每一个像素点只能表达一种颜色
  • 所有的颜色都是由红、绿、蓝三种颜色合成的,红绿蓝称为:三基色
  • 色彩深度包括:
色彩深度 颜色数量 名称
1 位 2 种 黑白
8 位 256 种 灰阶
15/16 位 32768/65536 种 高彩
24 位 16677216 种 真彩
30/36/48 位 16677216 种 全彩

24 位色

  • 由纯色到逐渐降低饱和度,红色有 2 ^ 8 = 256 种红色。也称 8 位色,因为用二进制描述需要 00000000 - 11111111,共需 8 位二进制来描述
  • 存储时红色的信息需要 8 位 即 1 个字节来存储
  • 绿色、蓝色一样
  • 三种颜色混合后总共可以得到 2 ^ 8 * 2 ^ 8 * 2 ^ 8 = 2 ^ 24 = 16777216 种颜色,即 24 位色
  • 24 位色,又叫真彩色

16 位色

  • 16 位色拥有 2 ^ 16 = 65536 种颜色
  • 红色、蓝色各占 5 位,绿色占 6 位,因为人眼对绿色分辨的色调更精确
  • 即有 32 种红色、32 种蓝色、64 种绿色
  • 某些情况下三种颜色各占 5 位、剩下的 1 位不用,即为 15 位色

32 位色

  • 实际就是 24 位色模式
  • 剩余的 8 位不分配到像素中,这种模式是为了提高数据传输速度
  • 一些特殊情况下,如 DirectX、OpenGL 环境,剩余的 8 位用来描述像素的透明度(Alpha)

屏幕色数

  • 智能手机历史上主流屏幕色数:
    • 6 万色屏幕可以显示 65536 种不同的颜色
    • 1600 万色屏幕可以显示 16777216 种颜色

Android 支持的颜色模式

颜色模式 描述 一个像素点占用空间 备注
ARGB8888 四通道高精度(32 位) 4 字节 加载图片的默认模式,色彩丰富。但占用空间较大
ARGB4444 四通道低精度(16 位) 2 字节 在 Api 13 后被废弃,建议使用 ARGB8888。从 Api 19 开始,使用此种模式会被 ARGB8888 替代
RGB565 三通道(16 位) 2 字节
Alpha8 仅有透明通道(8 位) 1 字节
  • 由表可以看出,屏幕默认模式为 RGB565,即为 16 位色模��
  • 我们常用的是 ARGB8888 和 ARGB4444 模式
  • 由于屏幕是不透明的,所以显示在屏幕上的颜色可以认为是没有 Alpha 通道的
  • Alpha 通道主要用于两种颜色进行混合时使用,如上层颜色和下层颜色叠加时

屏幕材质

目前主流手机屏幕材质分为两种:LCD 和 OLED。两者最大区别为:

  • LCD 屏幕通过外部光源照亮
  • OLED 屏幕像素自发光 (通过有机材料)

关于 LCD 和 OLED 的详细对比可以参考这篇文章:

为什么 iPhone X 选择用 OLED 屏幕?

LCD 屏幕

屏幕材质 相关信息 主要使用案例
TFT 比较老的一种屏幕材质 Motorola Defy+
IPS 俗称 “Super TFT”,实质还是 TFT,显示通透、亮丽,可视角度大 iPhone 系列
SLCD(SuperLCD) LCD 屏幕的高级进阶,色彩还原真实 HTC 系列

OLED 屏幕

目前主流的 AMOLED 屏幕属于 OLED 屏幕的一个分支,技术掌握在三星手中。

屏幕材质 相关信息 主要使用案例
AMOLED 三星第一代 AMOLED 屏幕 Nokia N86、N8
Super AMOLED 三星第二代 AMOLED 屏幕,色彩饱和度高,显示艳丽。之后还延伸出 Super AMOLED Advanced 和 HD Super AMOLED 三星盖世系列
Super AMOLED PLUS 三星第三代 AMOLED 屏幕,由 Pentile 排列方式改为传统的 RGB 排列方式 三星 I9100

参考文档

Android 官方文档:面向多种屏幕的设计

Android 屏幕适配全攻略(最权威的官方适配指导)

WikiPedia:显示分辨率列表

DPI 和 PPI 如何换算?:屏幕分辨率那些事儿

16 位色、24 位色、真彩色、32 位色的概念

雷锋科普:主流手机屏幕材质有哪些?

留下你的脚步