3.2 支持不同的屏幕
对Android设备屏幕进行分类,一般使用两个属性:尺寸和密度。你应该预料到你的应用程序将被安装在不同范围的尺寸和密度屏幕的设备上。因此,您应该包含一些可替换资源,针对不同的屏幕大小和密度,优化你的应用程序的外观。
· 有四种普遍的尺寸:小(small),正常(normal),大(large),超大(xlarge)
· 也有4种普遍的密度:低(ldpi),中(mdpi),高(hdpi),超高(xhdpi)
声明你要在不同的屏幕中使用的布局和位图,你必须在不同的目录中放置这些可替换的资源,就像你为不同的语言字符串所做的那样。
另外要注意,屏幕方向(横向或纵向)被认为是一个屏幕大小的变化,所以很多应用程序应该针对每个方向修改布局,来优化用户体验。
创建不同的布局
为了优化在不同的屏幕尺寸上用户体验,,你应该为每个你想支持的屏幕尺寸创建一个独一无二的布局XML文件。每个布局应该保存到适当的资源目录,与一个-
<screen_size>
后缀来
命名。例如,大屏幕唯一的布局应保存在 res/layout-large/
目录下
。
注: Android自动拉伸你的布局来正确地适应屏幕。因此,你的不同屏幕尺寸的布局,不需要担心UI元素的绝对大小,而是把重点放在影响用户体验的布局结构上(如重要视图相对于同级视图的大小或位置)。
例如,这个项目包含一个默认的布局和一个可替换的大 屏幕布局:
MyProject/
res/
layout/
main.xml
layout-large/
main.xml
文件名必须是完全一样的,但它们的内容是不同的,以便为相应的画面尺寸提供优化的用户界面。
只需像往常一样在你的应用程序中引用这个布局文件:
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
根据运行您的应用程序的设备屏幕尺寸,系统从布局目录加载适当的布局文件。关于Android是如何选择适当的资源的更多信息,可参考提供资源 指南。
再举一个例子,这里是一个有横向替换布局的项目:
MyProject/
res/
layout/
main.xml
layout-land/
main.xml
默认情况下,纵向使用layout/main.xml
文件。
如果你想为提供一个特殊的横向布局,包括在大屏幕上,那么你需要同时使用larger和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
注: Android 3.2及以上的系统,支持一个先进的指定屏幕尺寸的方法,这个方法允许你根据最小宽度和高度的与密度无关像素(DIP),为不同的屏幕尺寸指定资源文件。这节课不包括这项新技术。欲了解更多信息,请阅读多屏幕的设计。
创建不同的位图
你应该总是对各个普遍的密度桶(bucket)提供正确缩放的位图资源:低,中,高和超高密度。这可以帮助你在所有的屏幕密度上实现良好的图形质量和性能。
要生成这些图像,你的原始资源应该是矢量格式的,并为各个密度生成的图像使用下面的拉伸比例:
· xhdpi:2.0
· hdpi:1.5
· mdpi:1.0(基线)
· ldpi:0.75
这意味着,如果你为xhdpi设备生成一个200x200的图像,你应该为其它密度产生相同的资源:hdpi是150X150,mdpi是100x100,ldpi是75X75。
然后,将这些文件放在适当的绘制资源目录中:
MyProject/
res/
drawable-xhdpi/
awesomeimage.png
drawable-hdpi/
awesomeimage.png
drawable-mdpi/
awesomeimage.png
drawable-ldpi/
awesomeimage.png
任何时候你引用@drawable/awesomeimage
,系统根据屏幕的密度选择合适的位图。
注意:低密度(ldpi)的资源并非总是必要的。当你提供hdpi的资产,系统会把它们缩小一半来正确地适应ldpi屏幕。
关于您的应用程序创建图标资产的更多的提示和指引,请参阅 意象设计指南。