Android屏幕适配规则

要适配不同的屏幕,首要需要的是要能够将不同的屏幕分辨出来,android提供了若干不同的维度来进行限定(qualifier,有的翻译为限定词)

技术分享

上图所示为常用的一些维度,不过不是全部,全部的维度可以在官方的列表中查找。

图中从左到右按照箭头指示方向的优先级依次降低(查找匹配资源的时候会用到优先级),同时在对res子目录采用限定词进行命名的时候,也必须按照这个优先级进行命名,例如res-sw600dp-port是对的而res-port-sw600dp就会出现编译错误。有些维度可以有很多不同的具体参数,如smallestWidth,有些只能有固定的一些选择,如语言,屏幕方向port/land这种。

 

 

以下分别来介绍各个维度:

1语言(zh-rCN, 主要可以用ISO 639-1标准定义的两个字母的语言代码

2smallestWidth最短可用宽度sw-<N>dp),这个是从android3.2开始加入的,表示设备可用的最短宽度,与屏幕方向无关。但是,这个参数在使用时会涉及到屏幕上的一些组件,如果屏幕上有navigation bar等,则最短可用宽度可能并不到屏幕的最短边的数值,因为这个参数指的是我们的UI可用的区间。

适配流程:当多个目录都使用了该限定词的时候,匹配原则为不大于可用宽度的最大值。即如果屏幕最短边为1536,屏幕密度为xhdpi(即320dpi),1536/2 = 768,则在所有的sw-<N>dp中选择小于等于768的最大值,也即向下查找匹配。

3、available width(w-<N>dpsmallestWidth类似,但是与屏幕方向有关,向下匹配

4、screenSize屏幕尺寸,根据屏幕对角线大小来界定(单位inch-英寸),可分为small/normal/large/xlarge。适配顺序为从高到低,如果只有超过当前实际尺寸的目录中有定义,则crash。这个维度从android3.2开始已经不建议使用,建议采用shortestWidth

5、屏幕方向,这个是最简单的,横向纵向

6、Screen density屏幕密度dots per inch),ldpi/mdpi/hdpi/xhdpi/xxhdpi分别对应的屏幕密度为120/160/240/320/480/640dpi,在放置资源的时候资源大小也要按照相应比例。(决定1dp代表多少pixel)。

适配流程:优先从当前屏幕密度匹配的目录查找,如果没有则不断向上层查找(倾向于将大图片缩小,而不是小图片放大),如果上层没有则向下层查找,如果都没有,才取默认的目录,定位到特定目录后,会根据定位到的目录与当前屏幕密度的比例关系进行缩放操作。

7、分辨率 (800*480,官方文档上已经没有,但目前仍可使用,优先级介于navplatform之间,适配顺序为从高到低

8、Platform version:参见Api Levels。适配顺序也是从高到低

 

 

 

Android资源匹配流程

 技术分享

 

 

 

Best practice

1、为不同的屏幕尺寸及方向提供不同的layoutdimen

2、为不同的屏幕密度dpi提供不同的drawable

3、提供默认资源防止crash

4、修改某个目录下的值的时候,确认其上层是否有配置该参数值,如果有,则可以直接修改;如果没有,则要将本层的值复制到上层之后再来修改本层的值

 

 

 

Android官方

https://developer.android.com/guide/topics/resources/providing-resources.html

https://developer.android.com/guide/practices/screens_support.html

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。