Android 支持多种屏幕第一篇

知识点

  1. 理解密度无关像素(dp/dip)的概念
  2. 了解通用的屏幕尺寸和密度组
  3. 理解密度独立性的概念

概述


Android 系统为我们提供了 API,可用于控制应用适用于特定屏幕尺寸和密度的 UI,即适应不同屏幕尺寸的布局资源,对不同屏幕配置做优化设计。

关键术语


屏幕尺寸

屏幕对角测量的实际物理尺寸。

Android 将所有实际屏幕尺寸分为四种通用尺寸:小( small )、正常( normal )、大( large )和超大( xlarge )。

屏幕密度

屏幕物理区域中的像素量,通常称为 dpi (每英寸点数)。

Android 将所有屏幕密度分为六种通用密度:低( ldpi )、中( mdpi )、高( hdpi )、超高( xhdpi )、超超高( xxhdpi )和超超超高( xxxhdpi )。

分辨率

屏幕上物理像素点的总数。

在 Android 中添加对多种屏幕的支持时,应用不会直接使用分辨率。而是通过通用尺寸和密度组来指定屏幕尺寸及密度。

密度无关像素 ( dip/dp )

UI 布局时使用的虚拟像素单位,用于以密度无关方式表示布局纬度或位置。

首先解释下 dip/dp、px 的定义

px (pixels):像素,就是屏幕上实际的像素点单位。

dip/dp (density-independent pixels):密度无关像素,一种基于屏幕密度( dpi )的抽象单位。

dip产生的缘由

为了兼容各种各样分辨率的设备,让显示效果更完美,Android 从 1.6 开始,加入了密度无关像素 dip/dp

px 和 dp 的换算计算公式

px = dip * (dpi/160),当屏幕密度 (dpi) 为 160 时,px = dip。

在标准屏幕 480*320 上,px 与 dp 是 1 : 1。

px 与 dp 关系

图表 1

图表 1

我们在开发时,使用换算后的 dp,系统会自动按比例计算为 px,从而适配视图。

支持屏幕范围


Android 支持多种屏幕尺寸和密度,反映设备可能具有的多种不同的屏幕配置。我们可以使用 Android 系统的功能优化应用的各种屏幕配置下的用户界面,确保应用不仅正常渲染,而且在每个屏幕上提供最佳的用户体验。

  • 四种通用尺寸:小、正常、大和超大。

    不过从 Android 3.2 开始,这些尺寸组已弃用,而采用根据可用屏幕宽度管理屏幕尺寸的新技术,这在下文会进行具体介绍。

  • 六种通用的屏幕密度:

    分类屏幕密度范围
    lpdi (低)~120dpi
    mdpi (中)~160dpi
    hdpi (高)~240dpi
    xhdpi (超高)~320dpi
    xxhdpi (超超高)~480dpi
    xxxhdpi (超超超高)~640dpi

通用的尺寸和密度按照基线(即正常尺寸和 mdpi(中)密度)排列。

每种通用的尺寸和密度都涵盖一个实际屏幕尺寸和密度范围。实际屏幕尺寸和高宽比可能略有不同。比如,两台相同 hdpi 屏幕密度的设备,其实际像素密度可能略有不同。 Android 系统将这些差异抽象到应用里,使我们可以通过提供通用尺寸和密度设计的 UI,让系统按需要进行调整。

下图 2 是将实际的不同尺寸和密度的粗略归类

图 2

在给不同的屏幕尺寸设计 UI 时,每种通用的屏幕尺寸都关联了系统定义的最低分辨率。

  • 超大屏幕至少为 【960dp x 720dp】
  • 大屏幕至少为 【640dp x 480dp】
  • 正常屏幕至少为 【470dp x 320dp】
  • 小屏幕至少为 【426dp x 320dp】

要针对不同的屏幕尺寸和密度优化应用的 UI,可为任何通用的尺寸和密度提供备用资源。通常,应为某些不同的屏幕尺寸提供替代布局,为不同的屏幕密度提供替代位图图像。在运行时,系统会根据当前设备屏幕的通用尺寸或密度对应用使用适当的资源。

密度独立(无关)性


密度独立性,就是应用显示在密度不同的屏幕上时,从我们的视角看,如果它能始终保持用户界面元素的物理尺寸,就实现了密度独立性。

保持密度独立性很重要,因为如果没有这个功能,UI 元素(例如按钮)在低密度屏幕上看起来较大,在高密度屏幕上看起来较小。

下图 3 为不支持不同密度的示例应用在低、中、高密度屏幕上的显示情况。
图 3

下图 4 为良好支持不同密度(密度独立)的示例应用在低、中、高密度屏幕上的显示情况。
图 4

在图 3 中,文本视图和位图对象是以像素(px 单位)指定的尺寸,视图的物理尺寸在低密度屏幕上更大,在高密度屏幕上更小。这是因为,虽然实际屏幕尺寸相同,但高密度屏幕每英寸像素更多(同样多的像素在更小的区域内)。

在图 4 中,布局尺寸以密度无关像素(dp 单位)指定。由于密度无关像素的基线是中密度屏幕,因此在中密度屏幕上的视图看起来和图 3 一样。但对于低密度和高密度屏幕,系统将分别增加和减少密度无关像素的值,以适应屏幕。

Android 系统通过两种方式实现密度独立性。

  • 系统会根据当前屏幕密度扩展 UI 的 dp 单位数;
  • 系统在必要时可根据当前屏幕密度将可绘制对象资源扩展(缩放)到适当的大小。

「大多数情况下,为了确保应用中屏幕独立性,我们只需以适当的密度无关像素(dp 单位)或 “wrap_content” 指定所有的布局尺寸。系统会根据适用于当前屏幕密度的缩放比例适当地缩放位图可绘制对象,以适当的大小显示。」

「但位图缩放可能导致模糊或像素化很简单。为了避免伪影,应为不同的密度提供替代的位图资源。例如,应为高密度屏幕提供分辨率较高的位图,然后系统对高密度屏幕将使用这些位图。」

总结


Android 适配多种屏幕,不是直接使用屏幕的分辨率,而是使用通过 Android 中通用的尺寸和密度组来指定屏幕的实际尺寸和密度。

在 UI 布局中使用密度无关像素(dp)来代替原来的(px),系统会根据实际的屏幕来自动按比例计算为实际的 px。

为任何通用的布局和密度组通过相应的备用资源,就是为某些不同的屏幕尺寸提供替代布局,为不同的屏幕密度提供替代的位图资源。在运行时,系统会根据当前设备屏幕的通用尺寸或密度对应用使用适当的资源,这也是实现了密度独立性。

Android 支持多种屏幕第二篇

参考文章

Android API

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值