屏幕兼容性概览

运行 Android 的设备多种多样,它们有着不同的屏幕尺寸和像素密度。 尽管系统可以通过缩放和调整大小来使您的界面适合不同屏幕,但您应该做出进一步优化,以确保界面能够在各类屏幕上美观地呈现。

本文概述了这些主题以及 Android 上的可用功能,以帮助您的应用进行相应调整。 要了解如何针对各种不同屏幕构建应用的具体说明,请参阅以下页面:

屏幕尺寸

屏幕尺寸是系统为您的应用界面提供的可见空间。 您的应用的屏幕尺寸并不是设备的实际屏幕尺寸,而是综合考虑了屏幕方向、系统装饰(如导航栏)和窗口配置更改(例如,当用户启用多窗口模式时)后的尺寸。

灵活布局

默认情况下,Android 会调整应用布局的大小以适应当前屏幕。 为了确保布局调整能够很好地适应屏幕尺寸的微小变化,您需要灵活地实现布局。 您必须遵循的核心原则是避免对界面组件的位置和大小进行硬编码。 您应该允许拉伸视图尺寸并指定视图相对于父视图或其他同级视图的位置,这样即便布局扩大,您期望的顺序和相对大小也会保持不变。

详细了解灵活布局

替代布局

灵活布局非常重要,但您还应该设计不同的布局,以便根据不同设备(如手机和平板电脑)上的可用空间优化用户体验。 因此,Android 允许您提供 Alternative layouts 文件,而系统会在运行时根据当前设备的屏幕尺寸应用这些文件。

图 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 框架和工具提供了让应用适配所有屏幕配置所需的一切,但您可能还是会因为某种不兼容性,决定不让您的应用支持某些屏幕配置。

在这种情况下,您可以声明您的应用仅支持特定屏幕