Android的适配

Android的适配分为3个方面的适配:语言、屏幕、android版本的适配。
本节只讲第二种—屏幕的适配:
Android的不同屏幕可以通过2个属性划分:尺寸、密度。可预料到我们的app会被安装在一系列的尺寸、密度不同的屏幕中。因此,我们应该包含一些可以替代的资源来优化我们的app在不同屏幕下的显示效果。
4种常见的尺寸: small, normal, large, xlarge。
4种常见的密度: low (ldpi), medium (mdpi), high (hdpi), extra high (xhdpi)。
用来适配不同屏幕的布局和图片资源,需要放在单独的文件夹中,就想是区分语言那样。
众所周知,屏幕的方向(水平、垂直)也被是为屏幕尺寸的一种,所以很多app都应该修改布局来让用户在每个方向有更好的体验。
①创建不同的布局
为了优化app在不同屏幕尺寸上的用户体验,我们应该为每个屏幕尺寸创建单独的xml布局文件。每个布局都应该存放在合适的资源文件夹下,并以尺寸做后缀命名。例如一个适用于大屏幕的布局文件应该放在res/layout-large下。
注意:android会自动调节布局来更好的适应屏幕。因此,针对不同屏幕的布局文件不需要过度担心UI组件的绝对大小,跟应该集中调节那些可能影响用户体验的布局结构(例如,重要视图与同级视图之间的位置、或者尺寸)。
例如,一个项目包含一个默认的布局和一个针对大屏幕的替换布局。
MyProject/
res/
layout/
main.xml
layout-large/
main.xml
文件的名字必须命名为一样,但是他们在匹配的屏幕尺寸中提供不同的内容去优化UI。
你经常使用的最简单的对布局文件的引用:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}

系统根据app运行设备的屏幕尺寸,从合适的布局文件夹下加载布局文件。想知道更多android如何选择合适的资源,请参考 Providing Resources guide。
另外一个例子,这个项目包含一个可替换的水平方向布局文件夹。
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及其以上版本支持一种定义屏幕尺寸的新方法,允许你根据屏幕的最小宽度和高度的非密度制约像素,指定屏幕的资源。本节并没有讲到这种技术。
②创建不同的图片资源
你应该一直提供图片资源给合适的密度桶:low, medium, high and extra-high density。这有助于在所有的屏幕上取得高品质效果和性能。
为了生成这些图片,你应该先确保你生成的是矢量图,生成每个密度的图片都遵循以下尺寸规范:
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,系统都会根据屏幕密度选择合适的图片。
注意:Low-density (ldpi)并不是必须的。当你提供hdpi资源后,系统会缩放其一半来适配ldpi屏幕。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值