运行 Android 的设备多种多样,它们有着不同的屏幕尺寸和像素密度。 尽管系统可通过基本的缩放和调整大小功能使界面适应不同屏幕,但您应做出进一步优化,以确保界面能够在各类屏幕上美观地呈现。
本文概述了这些主题以及 Android 上的可用功能,以帮助您的应用进行相应调整。 如需了解如何针对各种不同屏幕构建应用的具体说明,请参阅以下页面:
屏幕尺寸
屏幕尺寸是系统为您的应用界面所提供的可见空间。 应用的屏幕尺寸并非设备的实际屏幕尺寸,而是综合考虑屏幕方向、系统装饰(如导航栏)和窗口配置更改(例如,当用户启用多窗口模式时)后的尺寸。
灵活布局
默认情况下,Android 会调整应用布局的大小以适应当前屏幕。 为确保布局调整能很好地适应屏幕尺寸的微小变化,您需要灵活地实现布局。 您必须遵循一项核心原则,即避免对界面组件的位置和大小进行硬编码。 您应允许拉伸视图尺寸并指定视图相对于父视图或其他同级视图的位置,这样即便布局扩大,您期望的顺序和相对大小也会保持不变。
备用布局
灵活布局非常重要,但您还应设计不同的布局,以便根据不同设备(如手机和平板电脑)上的可用空间优化用户体验。 因此,Android 允许您提供备用布局文件,而系统会在运行时根据当前设备的屏幕尺寸应用这些文件。
图 1. 同一个应用针对不同屏幕尺寸使用不同布局
可拉伸图像
由于布局应能通过拉伸适应当前屏幕,因此您附加至任何布局视图的位图也应支持拉伸。 但是,朝任意方向拉伸普通位图可能会导致奇怪的缩放失真及图像倾斜问题。
为解决此问题,Android 支持九宫位图(您可以在其中指定可拉伸的小像素区域,而图像的剩余部分会保持不缩放状态)。
像素密度
像素密度是屏幕单位面积内的像素数,称为 dpi(每英寸的点数)。 它与分辨率不同,后者是屏幕上的总像素数。
图 2. 在尺寸相同但像素密度不同的两个设备上放大图像
密度独立性
如果应用在不同像素密度的屏幕上显示(如图 2 所示),且保留界面设计的物理尺寸(从用户角度来看),则说明其实现了“密度独立性”。 保持密度独立性很重要,因为如果不这样,界面元素(例如按钮)在低密度屏幕上显示时可能会变大,在高密度屏幕上显示时则可能会变小(这是因为当像素较大时,单位长度内的像素数较少,如图 2 所示)。
通过提供密度独立像素(dp 或 dip)而非像素 (px) 作为您应使用的测量单位,Android 系统可帮助您实现密度独立的屏幕显示。
备用位图
为确保图像在所有屏幕上显示最佳效果,您应提供备用位图来适应各种屏幕密度。 例如,如果您的应用仅提供适用于中密度 (mdpi) 屏幕的位图,则在高密度屏幕上 Android 会将其放大,这样该图像在两种屏幕上会占用相同的物理空间。 这可能会导致位图中出现明显的缩放失真问题。 因此,您的应用应包含更高分辨率的备用位图。
矢量图形
对于简单类型的图像(通常为图标),您可以使用矢量图形,以避免为每个密度创建单独的图像。 由于矢量图形使用几何线条路径(而非像素)来定义插图,因此,它们可在不产生缩放失真问题的情况下绘制成任意尺寸。
Wear OS、TV、Auto 和 Chrome 操作系统
上述建议适用于所有 Android 设备类型,但如果您想构建适用于 Wear OS、Android TV、Android Auto 或 Chrome 操作系统设备的应用,则需做出进一步改进。
这些设备均有自己的用户互动模型,您的应用于应能适应这些模型。 在某些情况下(例如对于 Wear OS),您应重新考虑应用的用户体验并构建专用于该设备的应用。 为支持 Chrome 操作系统设备(例如 Google Pixelbook),您可能只需对现有应用进行微改,即可支持键盘/鼠标交互和更大的屏幕。
如要支持这些设备,请参阅以下开发者指南:
屏幕不兼容
尽管 Android 框架和工具提供让应用适配所有屏幕配置的全部资源,但您可能还是会因某种不兼容性,决定不让您的应用支持某些屏幕配置。
在此情况下,您可以声明您的应用仅支持特定屏幕。