屏幕支持概览
本节概述 Android 对多种屏幕的支持,包括: 本文档和 API 中所用术语和概述的简介、 系统支持的屏幕配置摘要,以及 API 和基本 屏幕兼容性功能的概述。
术语和概念
屏幕尺寸(Screen size)
按屏幕对角测量的实际物理尺寸,inch。
为简便起见,Android 将所有实际屏幕尺寸分组为四种通用尺寸:小(small)、 正常(normal)、大(large)和超大(xlarge)。
屏幕密度(Screen density)
屏幕物理区域中的像素量;通常称为 dpi(每英寸点数)。例如, 与“normal”或“high”密度屏幕相比,“low”密度屏幕在给定物理区域的像素较少。
为简便起见,Android 将所有屏幕密度分组为六种通用密度: 低(ldpi)、中(mdpi)、高(hdpi)、超高(xhdpi)、超超高(xxhdpi)和超超超高(xxxhdpi)。
六种通用密度之间的 3:4:6:8:12:16 缩放比率(0.75,1,1.5,2,3,4)
注:dpi,印刷用单位,指打印精度,打印机在每英寸可打印的墨滴点数。
ppi=ResolutionWidth2+ResolutionHeight2−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−√÷ScreenSize
方向(Orientation)
从用户视角看屏幕的方向,即横屏(land)还是竖屏(port),分别表示屏幕的纵横比(long/notlong)是宽还是高。请注意,不仅不同的设备默认以不同的方向操作,而且方向在运行时可随着用户旋转设备而改变。
分辨率(Resolution)
屏幕上物理像素(Physical pixel)的总数。添加对多种屏幕的支持时, 应用不会直接使用分辨率;而只应关注通用尺寸和密度组指定的屏幕尺寸及密度。
密度无关像素 (dp/dip) (Density-independent pixel)
在定义 UI 布局时应使用的虚拟像素单位,用于以密度无关方式表示布局维度或位置。
密度无关像素等于 160 dpi 屏幕上的一个物理像素,这是 系统为“mdpi”密度屏幕假设的基线密度。在运行时,系统 根据使用中屏幕的实际密度按需要以透明方式处理 dp 单位的任何缩放 。dp 单位转换为屏幕像素很简单: px = dp * (dpi / 160)。 例如,在 240 dpi 屏幕上,1 dp 等于 1.5 物理像素。在定义应用的 UI 时应始终使用 dp 单位 ,以确保在不同密度的屏幕上正常显示 UI。
六种通用的密度:
注:从 Android 3.2(API 级别 13)开始,这些尺寸组 已弃用,而采用根据可用屏幕宽度管理屏幕尺寸的 新技术。
- ldpi(低)~120dpi
- mdpi(中)~160dpi (HVGA)
- hdpi(高)~240dpi
- xhdpi(超高)~320dpi
- xxhdpi(超超高)~480dpi
- xxxhdpi(超超超高)~640dpi
声明适用于 Android 3.2 的平板电脑布局 :配置示例
为帮助您针对不同的设备类型确定某些设计,下面提供了一些 常见的屏幕宽度值:
- 320dp:常见手机屏幕(240x320 ldpi、320x480 mdpi、480x800 hdpi 等)。
- 480dp:中间平板电脑,例如 Streak (480x800 mdpi)。
- 600dp:7 英寸平板电脑 (600x1024 mdpi)。
- 720dp:10 英寸平板电脑(720x1280 mdpi、800x1280 mdpi 等)。
下面是有关如何确保应用在 不同屏幕上正常显示的快速检查清单:
- 在 XML 布局文件中指定尺寸时使用 wrap_content、match_parent 或 dp 单位 。
- 不要在应用代码中使用硬编码的像素值
- 不要使用 AbsoluteLayout(已弃用)
- 为不同屏幕密度提供替代位图可绘制对象
表. 所示为 Android SDK 中可用的各种模拟器皮肤,可用 以模拟某些最常见的屏幕配置。
表. Android SDK(粗体表示)及其他 代表性解决方案中模拟器皮肤提供的 各种屏幕配置
屏幕类型 | 低密度(120),ldpi | 中密度(160),mdpi | 高密度(240),hdpi | 超高密度(320),xhdpi |
---|---|---|---|---|
小屏幕 | QVGA (240x320) | 480x640 | ||
正常屏幕 | WQVGA400 (240x400) WQVGA432 (240x432) | HVGA (320x480) | WVGA800 (480x800) WVGA854 (480x854) 600x1024 | 640x960 |
大屏幕 | WVGA800** (480x800) WVGA854** (480x854) | WVGA800* (480x800) WVGA854* (480x854) 600x1024 | ||
超大屏幕 | 1024x600 | WXGA (1280x800)† 1024x768 1280x768 | 1536x1152 1920x1152 1920x1200 | 2048x1536 2560x1536 2560x1600 |
* 要模拟此配置,在 创建使用 WVGA800 或 WVGA854 皮肤的 AVD 时请指定自定义密度 160。
** 要模拟此配置,在创建 使用 WVGA800 或 WVGA854 皮肤的 AVD 时请指定自定义密度 120。
† 此皮肤可用于 Android 3.0 平台
补充
现实中我们要考虑的:
- 物理像素(Physical pixel),
px
- 逻辑像素(Logic point),
pt
- 屏幕密度(Screen density),
dpi
- 密度无关像素/设备独立像素(Density-independent pixel) (dp/dip),基于屏幕密度,
dp
- 设备像素比(device pixel ratio) = 物理像素 / 设备独立像素,
js:window.devicePixelRatio
, css:window.devicePixelRatio
、window.devicePixelRatio
、window.devicePixelRatio