Android官方文档翻译:支持不同的屏幕
原文地址:https://developer.android.com/training/basics/supporting-devices/screens.html#create-bitmaps
Android使用两种常规属性对设备屏幕进行分类:尺寸和密度。你一定期望你的app能被安装在各种尺寸以及分辨率的设备上。
这样呢,你应该包含一些可选资源来优化你的app在不同屏幕尺寸和密度的设备上的外观。
- 有四种普遍的尺寸:small,normal,large,xlarge
- 同样有四种普遍的密度:ldpi,mdpi,hdpi,xhdpi
为了声明不同的布局和图片(bitmaps)给不同的屏幕,你必须放置这些可选资源到不同的目录,就像你使用不同的语言字符串(strings)的方式一样。
创建不同的布局
为了优化在不同屏幕尺寸上的用户体验,你应当为每个你想支持屏幕尺寸创建单独的布局xml文件。每一个布局应当被保存在适当的资源目录,以一个-<screen_size>
后缀命名。例如,一个单独的大屏幕布局应当保存在res/layout-large/
.
Note: Android自动缩放你的布局,为了正确的适应屏幕。因此,你的不同屏幕尺寸的布局不必担心UI元素的绝对尺寸,而只需关注影响用户体验的布局的结构(例如重要的视图相对于兄弟布局的大小和位置)。
例如,这个项目包含一个默认布局和一个大屏幕的可选布局:
MyProject/
/res
layout/
main.xml
layout-large/
main.xml
这两个文件名必须完全一样,但是内容不同,为了在不同的尺寸的屏幕上有一个优化的UI效果。
简单的引用这个布局文件,在你的app中,像平常一样:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
在你的app运行时,系统根据屏幕尺寸,从合适的目录加载布局文件。更多的信息,关于Android选择合适的资源,看这里:Providing Resources
另一个例子,一个项目,带有横屏的可选布局:
MyProject/
res/
layout/
main.xml
layout-land/
main.xml
默认的,layout/main.xml
用于竖屏方向。
如果你想为横屏提供一个特殊的布局,包括在大屏幕上,那么你需要同时使用large和land限定词:
MyProject/
res/
layout/ # default (portrait)
main.xml
layout-land/ # landscape
main.xml
layout-large/ # large (portrait)
main.xml
layout-large-land/ # large landscape
main.xml
Note: Android 3.2及以上版本支持一种高级方法来定义屏幕尺寸,允许您根据密度无关像素的最小宽度和高度来指定屏幕尺寸的资源。本课不涵盖这一新技术。有关详细信息,请参阅Designing for Multiple Screens。
创建不同的位图
您应该始终提供适当缩放到每个广义密度的位图资源:低,中,高和超高密度。这有助于您在所有屏幕密度上实现良好的图形质量和性能。
要生成这些图像,您应该以矢量格式从原始资源开始,并使用以下尺寸比例为每个密度生成图像:
* xhdpi: 2.0
* hdpi: 1.5
* mdpi: 1.0 (baseline)
* ldpi: 0.75
这意味着如果您为xhdpi设备生成200x200的图片,则应为hdpi的150x150,mdpi为100x100,ldpi设备为75x75生成相同的资源。
然后,将文件放在相应的drawable资源目录中:
MyProject/
res/
drawable-xhdpi/
awesomeimage.png
drawable-hdpi/
awesomeimage.png
drawable-mdpi/
awesomeimage.png
drawable-ldpi/
awesomeimage.png
每当您引用@ drawable / awesomeimage时,系统将根据屏幕的密度选择适当的位图。
注意:低密度(ldpi)资源并不总是必需的。当您提供hdpi资产时,系统将其缩小一半以适应ldpi屏幕。