最佳实践
支持多屏幕的目的是创建一个可以在 Android 支持的任何通用屏幕配置上正常运行并看起来不错的应用程序。本文档的前面部分提供了有关 Android 如何使您的应用程序适应屏幕配置以及如何自定义应用程序在不同屏幕配置上的外观的信息。本节提供了一些额外的提示和技术概述,可帮助确保您的应用程序针对不同的屏幕配置正确扩展。
以下是一份快速清单,说明如何确保您的应用程序在不同的屏幕上正确显示:
1.在 XML 布局文件中指定尺寸时使用 wrap_content、fill_parent 或 dp 单位
2.不要在你的应用程序代码中使用硬编码的像素值
3.不要使用AbsoluteLayout(已弃用)
4.为不同的屏幕密度提供替代的位图drawables
以下部分提供了更多详细信息。
- 使用 wrap_content、fill_parent 或 dp 单位作为布局尺寸
在 XML 布局文件中为视图定义 android:layout_width 和 android:layout_height 时,使用“wrap_content”、“fill_parent”或 dp 单位可确保视图在当前设备屏幕上具有适当的大小。
例如,layout_width="100dp" 的视图在中等密度屏幕上测量为 100 像素宽,而系统在高密度屏幕上将其缩放至 150 像素宽,因此视图占用的物理空间大致相同在屏幕上。
同样,您应该更喜欢 sp(与比例无关的像素)来定义文本大小。 sp 缩放因子取决于用户设置,系统缩放大小与 dp 相同。
- 不要在应用程序代码中使用硬编码的像素值
出于性能原因和代码更简单,Android 系统使用像素作为标准单位来表示尺寸或坐标值。这意味着视图的尺寸始终在代码中使用像素表示,但始终基于当前屏幕密度。例如,如果 myView.getWidth() 返回 10,则视图在当前屏幕上是 10 像素宽,但在具有更高屏幕密度的设备上,返回的值可能是 15。如果您在应用程序代码中使用像素值使用未针对当前屏幕密度进行预缩放的位图时,您可能需要缩放代码中使用的像素值以匹配未缩放的位图源。
如果您的应用程序在运行时操作位图或处理像素值,请参阅下面有关其他密度注意事项的部分。
- 不要使用 AbsoluteLayout
与其他布局小部件不同,AbsoluteLayout 强制使用固定位置来布置其子视图,这很容易导致用户界面在不同的显示器上无法正常工作。因此,AbsoluteLayout 在 Android 1.5(API 级别 3)中已被弃用。
您应该改用RelativeLayout,它使用相对定位来布置其子视图。例如,您可以指定按钮小部件应出现在文本小部件的“右侧”。
- 使用特定于大小和密度的资源
虽然系统会根据当前屏幕配置缩放您的布局和可绘制资源,但您可能希望在不同的屏幕尺寸上调整 UI,并提供针对不同密度优化的位图可绘制资源。这基本上重申了本文档前面的信息。
如果您需要准确控制应用程序在各种屏幕配置上的外观,请在配置特定的资源目录中调整布局和位图可绘制对象。例如,考虑要在中高密度屏幕上显示的图标。只需创建两种不同尺寸的图标(例如 100x100 用于中等密度,150x150 用于高密度)并使用适当的限定符将这两种变体放在适当的目录中:
res/drawable-mdpi/icon.png //用于中密度屏幕res/drawable-hdpi/icon.png //用于高密度屏幕