源地址:http://wiki.eoe.cn/page/Supporting_Different_Screens android
Android用两种常规属性来分类设备屏幕:尺寸和像素密度。做为开发者,你应当预料到你的android应用程序将会被安装到不一样屏幕尺寸和像素密度的设备上。所以,你的应用应当包含可选的资源来优化应用外观,以便支持上述不一样尺寸和像素密度的设备。app
* 有四种广义的尺寸:small, normal, large, xlarge。ide
* 一样也有四种广义的像素密度:low (ldpi), medium (mdpi), high (hdpi), extra high (xhdpi)。布局
为了声明用于不一样屏幕的不一样layouts布局和bitmaps资源,你必须把这些可选的资源文件分别放在不一样的目录,这一点相似于你在国际化时不一样语言strings的操做。优化
同时要注意屏幕的方向(landscape or portrait)也被认为是一种屏幕尺寸的变化,因此大多数应用都应该修改layout布局来提升用户在不一样屏幕方向上的体验。ui
为了提升在不一样设备屏幕上的用户体验,你应当为每一种你想要支持的屏幕尺寸建立一个独有的XML布局文件。每一布局文件应当存放到恰当的资源目录下,该目录以屏幕尺寸-做为后缀。例如,一个用于大屏幕的布局文件应当放在res/layout-large/目录下面。spa
注:Android会自动缩放你的布局以便适配屏幕。这样,用于不一样屏幕的布局文件就没必要过多考虑UI元素的绝对大小,相反应当关注于布局的结构,这将直接影响用户体验(好比重要view视图的大小或位置应当相对于同级view视图)。设计
例如,下面的项目包含了一个默认的layout和一个可选的用于大屏幕的layout目录:code
1 2 3 4 5 6 |
MyProject/ res/ layout/ main.xml layout-large/ main.xml |
目录中的布局文件名必须保持一致,可是它们的内容能够不一样,以便提供优化的UI来支持相对应的屏幕尺寸。orm
像往常同样在app中简单地得到layout布局文件的引用:
1 2 3 4 5 |
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); } |
Android系统将根据你的app应用所运行设备的屏幕尺寸从适当的layout目录加载布局文件。更多关于Android系统如何选择适当的资源文件能够在 Providing Resources | 资源提供 - Providing Resources 指导中获取。
下面是另一个案例,在这个项目中使用了可选的横向布局来支持横向屏幕:
1 2 3 4 5 6 |
MyProject/ res/ layout/ main.xml layout-land/ main.xml |
缺省状况下,layout/main.xml文件是垂直方向布局的。
若是你想提供一个特殊的横向布局,好比支持大屏幕,你须要同时使用large和land来修饰。
1 2 3 4 5 6 7 8 9 10 |
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 及以上版本支持一种更好的方法来定义屏幕尺寸,它容许咱们在与密度无关的像素状况下经过最小宽度和高度来为不一样屏幕指定资源。在本章节中咱们没有涉及该新特性。若是想得到更多相关信息,请阅读Designing for Multiple Screens | 多屏幕适配设计 - Designing for Multiple Screens
你应当为全部广义像素密度中的每一种都提供已经缩放好的适当的bitmap资源:低low, 中medium, 高high以及特高extra-high像素密度。这将使你的应用在全部分辨率的设备上都得到优良的图形质量和呈现效果。
为了生成这些图片资源,你应当以矢量图的格式来制做原始图片资源,而后根据下面的缩放尺寸生成每一种分辨率的图片:
特高分辨率xhdpi: 2.0
高分辨率hdpi: 1.5
中分辨率mdpi: 1.0 (基准)
低分辨率ldpi: 0.75
这意味着若是你要为特高分辨率设备生成一张200x200的图片,那么你须要为高分辨率设备生成150x150,中分辨率设备生成100x100,低分辨率设备生成75x75的图片。
而后把这些文件放置到恰当的资源目录:
1 2 3 4 5 6 7 8 9 10 |
MyProject/ res/ drawable-xhdpi/ awesomeimage.png drawable-hdpi/ awesomeimage.png drawable-mdpi/ awesomeimage.png drawable-ldpi/ awesomeimage.png |
之后在你引用@drawable/awesomeimage时,系统将根据设备的分辨率自动选择适当的图片资源。
注:低分辨率(ldpi)的资源并不老是必需的。当你提供高分辨率资源时,系统将把它们对半缩放来适配低分辨率设备。
获取更多关于建立应用图标的技巧和设计指导,能够查看Iconography design guide|图标设计指南-Iconography design guide。