Android 支持多种屏幕第一篇

来源:互联网 发布:html如何连接数据库 编辑:程序博客网 时间:2024/06/17 04:11

知识点

  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

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 辞职后原单位没把档案给转出怎么办 天下行以租代购要起诉我怎么办 顺丰收件人电话地址都写错了怎么办 领导问任务完不成怎么办怎么回答 我和我老婆感情出现问题了怎么办 手机坏了手机浏览器里照片怎么办 不小心把电脑ie浏览器删了怎么办 华为手机自带浏览器中病毒了怎么办 手机打开浏览器提示中病毒了怎么办 手机卸载了浏览器和软件商店怎么办 房东在我租房期间贴房子出租怎么办 额头上毛孔大 还有些黑怎么办 孩子学跳舞老师压的疼怎么办 步步高点读机电池坏了怎么办 电脑连接受限制或无连接怎么办 电脑无线网受限制或无连接怎么办 电脑网络受限制或无连接怎么办 3 证书报考大专证书丢了怎么办 广工期末考试被老师警告了怎么办 我在农村不当队长我能力不够怎么办 我在农村不当队长我当代表怎么办 北京本地人社保中间断了一年怎么办 我想把大哥的孩子带出国要怎么办 美国有亲戚想让孩子出国怎么办 连接温控器的线断了怎么办 植发后好多原生发都脱落了怎么办 4岁宝宝支体能力差怎么办 当与游客发生矛盾时员工怎么办 顾客与同事发生矛盾你该怎么办 当一个人犯下的过错难以原谅怎么办 开车把别人撞成植物人了该怎么办 结婚证丢了孩子上不上学了怎么办 办房产证前加户主姓名怎么办手续 孩子上学户口跟房产不在一起怎么办 我家小孩被别的家长打了怎么办 要是小孩骗家长说老师打他怎么办 孩子在学校被家长打小孩怎么办 小孩在学校被老师打淤青家长怎么办 小孩和家长一吵架就说死怎么办 王者荣耀号被别人家长联接了怎么办 儿子12岁总是跟大人顶嘴怎么办