支持不同的屏幕
Android 通过两个属性来分类不同的屏幕:大小和密度。你应该考虑到你的APP可能会安装到不同大小和密度的设备上。因此,针对不同的屏幕,你应该有一些资源来让你的APP的外表得到优化。
大小分四种:小,正常,大,特大
密度也分为四种:低,中,高,特高
为了给不同的屏幕设置不同的layout 和图片,你必须把这些可供选择的资源单独放到一个目录下面去,这个跟不同语言使用不同的字符串一样。
屏幕方向(横屏和竖屏)也是一种区分屏幕大小的属性。所以你的APP应该优化在每个方向上的用户体验。
创建不同的布局
为了优化不同大小屏幕的用户体验,应该为每个你所需要支持的屏幕创建一个独立的XML 布局文件。每一个布局文件应该保存在合适的资源目录,命名:-<屏幕大小>后缀。例如创建一个大屏幕的layout.目录:res/layout-large/ ,并在这个目录下创建相应的布局文件。
注意:Android自动地衡量布局来适配不同的屏幕,因此你不用担心UI 元素的绝对大小,只需要关注影响用户体验的布局结构(重要view之间的位置以及相对大小)。
此外,对于为屏幕大小客制化的布局文件命名必须都一样,只要它们的内容做出改变和优化即可。
在代码中使用时,可以忽视屏幕大小,正常使用。系统会根据当前屏幕的大小来决定应该从哪个目录加载哪个布局文件。更多关于系统如何选择合适的资源见Providing Resources guide文章。
下面是关于横屏时单独提供的一个布局文件:
MyProject/
res/
layout/
main.xml
layout-land/
main.xml
默认情况下,layout/main.xml 文件是竖屏时候用的。
如果你要定义一个布局专门针对横屏,大屏的机器,则你需要用到large 和land 两个限定语。如下:
MyProject/
res/
layout/ # default (竖屏)
main.xml
layout-land/ # 横屏
main.xml
layout-large/ # 大屏/竖屏
main.xml
layout-large-land/ # 大屏/横屏
main.xml
注意:Android 3.2 以及以后的版本支持一个定义屏幕大小的高级方法。通过这个方法你能够依据屏幕的最小宽度和高度以及与像素无关的密度来指定屏幕资源。本文没有设计到这个方法,详见:Desiging for Multiple Screens.
创建不同的位图
对于不同密度的屏幕,你都需要相应的位图资源,这样才能保证在不同的机器上运行时的图形质量和性能优异。
要生成这些图片,在矢量格式中使用你的原生资源,来为每种密度生成如下大小的图片:
· xhdpi: 2.0
· hdpi: 1.5
· mdpi: 1.0 (baseline)
· ldpi: 0.75
这意味着如果 XHDPI 的图片大小是 200 ×200话,那么HDPI 就是 150 × 150
Mdpi 就是 100 × 100 ldpi就是75 *75
然后把图片放到相应的目录:
MyProject/
res/
drawable-xhdpi/
awesomeimage.png
drawable-hdpi/
awesomeimage.png
drawable-mdpi/
awesomeimage.png
drawable-ldpi/
awesomeimage.png
任何时候,当你引用@drawable/awesomeimage
这个图片的时候,系统会根据当前屏幕的密度来选择合适的图片。
注意:LDPI的资源有时候可以不需要。因为当你提供了一个HDPI资源时,系统会自动裁剪它得到LDPI的图片。
更多关于创建APP ICON的指导详见:Iconography design guide.