如转载请注明出处http://blog.csdn.net/ethanchiu/article/details/19611537
支持不同的屏幕
android将设备屏幕归纳为两种:尺寸和密度。你要知道你安装的app是在你设备屏幕的范围内的。这样,app需要包含些资源文件来优化app在不同密度尺寸的屏幕下的外观。
一般有四种尺寸: small, normal, large, xlarge和四种密度low (ldpi), medium (mdpi), high (hdpi), extra high (xhdpi)
为了给不同的屏幕适配,应该使用不同的布局和图片,你必须将这些可选的资源放到不同的文件夹下,类似于你设置不同语言。
需要意识到屏幕的方向(水平或者垂直)是不同的屏幕尺寸,所以许多apps需要修订布局来优化不同方向的用户体验。
创建不同的布局
为了优化在不同屏幕尺寸下的用户体验,你需要创建不同的布局xml文件。每一个布局文件需要保存在合适的资源文件夹下,按照 -<screen_size> 作为后缀。比如,一个大屏幕的布局需要放在res/layout-large/文件夹下。
注意:为了适应不同屏幕,android自动放缩布局。因此,不需要担心不同屏幕上的布局的UI元素的绝对值,应该把重点放在影响用户体验的布局结构上(比如重要view相对于兄弟view的大小和位置)。比如,这个项目包含了默认的布局和一个可选的大屏幕布局:
MyProject/ res/ layout/ main.xml layout-large/ main.xml文件名字是一样的,但是里面的内容是不一样的。
在你app中的简单引用
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
系统从合适的文件夹中读取了布局文件。更多信息看
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
注意:Android 3.2 即以上的版本提供一个定义屏幕尺寸的先进方法,这个方法可以给最小宽度和高度指定资源文件。本问不包括这个技术,更多信息请看Designing for Multiple Screens。
创建不同的Bitmap图片
你需要提供广义上不同密度的图片: low, medium, high and extra-high 。这会帮你获得好的图形质量和性能。
为了生成这些图片,你需要用矢量格式的原生资源,并为每种密度生成图片:xhdpi: 2.0
hdpi: 1.5
mdpi: 1.0 (baseline)
ldpi: 0.75
这就意味着要给xhdip设备生成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的屏幕。
更多创建图标的注意点和知道,参看Iconography design guide.