Android总体上按照两大类来分类设备屏幕:尺寸和分辨率。app在设备上运行应该考虑大小和分辨率。一样的,你应该包含不一样的资源来让app适应不一样的屏幕大小和分辨率。html
总体上有四种尺寸:小的,正常的,大的,超级大的android
和四种分辨率:低分辨率(ldpi),中分辨率(mdpi),高分辨率(hdpi),超高分辨率(xhdpi)app
为了声明不一样屏幕的不一样的布局和突变,你须要把不一样的资源放在不一样的文件夹下,和处理不一样语言的方法同样。ide
一样要注意到在考虑屏幕大小时也要考虑屏幕的方向(横竖屏),因此不少app须要在每一个方向上调整布局来来优化用户体验。布局
建立不一样的布局post
为了在不一样的屏幕尺寸上优化用户体验,你应该为每一个你要支持的屏幕大小建立一个单独的xml文件。每一个布局都应该被保存到对应的资源文件夹,命名以<screen_size>后缀结尾。例如,为大屏幕建立的布局文件应该存在res/layout-large优化
注意:Android会自动拉伸布局来适应屏幕。对于不一样屏幕的尺寸的布局,不须要考虑UI控件的绝对大小,能够把更多注意力放在影响用户体验的布局结构上(好比重要的view相对于它的子view的大小和位置)。ui
例如,这个工程包含默认布局和大屏幕的布局spa
MyProject/code
res/
layout/
main.xml
layout-large/
main.xml
注:文件名必须彻底同样,为了适应不一样屏幕大小的不一样UI,他们的内容是不一样的。
在app中和日常同样引用layout文件
1 @Override 2 protected void onCreate(Bundle savedInstanceState) { 3 super.onCreate(savedInstanceState); 4 setContentView(R.layout.main); 5 }
系统根据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
注意:Android3.2及以上版本支持一些高级方法来定义屏幕大小,能够元素最小的高度来宽度来为屏幕大小定义资源。这里不会降到这个新技术。更多信息,查看Designing for Multiple Screens。另外,在帮助文档中指出,在androidmainfest.xml文件中必须进行以下代码的配置。若是没有这几行代码,无论你怎么调整layout中的控件,对应分辨率的手机是没有任何效果的。
<supports-screens android:smallScreens="true" android:normalScreens="true" android:largeScreens="true" android:xlargeScreens="true" android:anyDensity="true" />
注意:因为android版本的不一样,有些版本不支持xlargeScreens,能够直接将android:xlargeScreens="true"去掉。
建立不一样的图片
你应该为每一个分辨率提供合适的可被拉伸的图片资源。这样能够在各类分辨率的屏幕上达到很好的绘图质量和效果。
为了生成这些图片,应该提供矢量图而且为下面的每一个分辨率提供图片:
xhdpi:2.0
hdpi:1.5
mdpi:1.0(baseline)
ldpi:0.75
着就意味着若是为xhdpi设备提供一张200*200的图片,应该为其余分辨率提供一样的资源:150*150 for hdpi, 100 * 100 for mdpi, 75 * 75 for ldpi。
而后,把这些文件当道对应的资源文件夹下:
MyProject/
res/
drawable-xhdpi/
awesomeimage.png
drawable-hdpi/
awesomeimage.png
drawable-mdpi/
awesomeimage.png
drawable-ldpi/
awesomeimage.png
任什么时候候引用@drawable/awesomeimage,系统会根据屏幕分辨率选择合适的图片。
注意:低分辨率(ldpi)的资源并非老是须要,当提供了hdpi资源后,系统会把他们缩小一半来适应ldpi屏幕