1、资源文件后缀类型
1)、layout-sw720dp
layout-sw720dp, values-sw720dp。sw =smallwidth,当你所有屏幕的最小宽度都大于720dp时,屏幕就会自动到带sw720dp后缀的资源文件里去寻找相关资源文件,这里的最小宽度是指屏幕宽高的较小值。
2)、layout-1024x720
固定的尺寸,适用罕见尺寸,或者需要微调的机器;
3)、layout-land-1024x720
layout-land-1024x720,values-land-1024x720,这个是固定为横向的布局使用,如果是纵向使用layout-port-1024x720。这种固定分辨率适用于固定适配特殊设备的情况。
4)、layout-en-1024x720
当系统语言为英文使用该目录资源。layout-zh-rCN-1024x720当系统语言为中文使用该目录资源
2、不同目录文件适配原则
1)、Drawable
可以在res目录下创建一系列的带后缀的drawable文件夹,例如drawable-hdpi,drawable-xhdpi等。drawable的适配机制是,系统会先到后缀与设备匹配的drawable目录下找对应的图片,当找不到的时候会去‘更高’一级的目录去找,再找不到,继续往高一级的找,再找不到就退而求其次去低一级的找,依次类推。
例如,在密度为xxhdpi的手机上运行app,会去drawable-xxhdpi目录下找图片资源,找不到就去drawable-xxxhdpi找,如果没有比drawable-xxxhdpi更高的,再找不到就去drawable-xhdpi找,再找不到就去drawable-hdpi找,直到找到对应的图片资源,当找到后,系统会按密度对图片做缩放处理,然后再显示到屏幕上,所以如果图片放的目录不对的话,有可能造成图片模糊。
2)、layout目录
layout目录也可以加后缀的,通常是带分辨率后缀,如layout-land-1024x720,layout-1280x720,layout-1920x1080等。layout目录的适配机制是从“高往低”找最接近的尺寸目录。
例如手机是1920x1080分辨率的,但是如果无此layout目录那么便会低一级的layout-1280x720找布局(而不会去高一级的layout-2560x1440找),依次类推,直至找到layout不带后缀的目录为止,如果还没有,就会报错。
所以考虑以下场景:原本我们的布局文件目录只有layout一个,没有其他带后缀的layout目录,实际测试中发现的布局在960x540手机上有问题。那么有些人可能会想到加个layout-960x540目录,然后在此目录下做特殊处理。那么问题来了,加了这个目录之后,layout目录就有两个,layout无后缀和layout-960x540。当在1920x1080手机上运行程序时,按照适配机制,系统会使用layout-960x540目录下的布局文件,而我们当初的初衷是只希望layout-960x540目录下的布局文件在960x540的手机上使用,所以这种情况下布局肯定会有问题。因此,千万注意上面这种场景,不要随意添加‘layout-分辨率’的这种目录,除非把各种主流分辨率都添加一遍。碰到这种问题,最好从dimens文件入手做适配。
3)、values目录之dimens文件
为了适配不同尺寸的手机,我们可以创建多个values目录,然后在其中定义dimens尺寸,例如values-1280x720,values-1196x720等。dimens适配的机制是,先找跟设备对应的values目录下的dimens文件中的尺寸定义,找不到则往低一级的找。
比如,在1280x720分辨率的手机上,如果app中没有创建values-1280x720目录,而只有values-1920x1080、values-1196x720目录和默认的values目录,那么系统会去优先去values-1196x720的目录下找对应的尺寸。如果找不到,则去默认的values找,再找不到就报错(不会去1920x1080目录找)。
总结:
1、drawable适配过程:找与设备密度对应目录下的图片->往更高密度的找->退而求
2、layout适配过程:找与设备对应的目录,找不到则从比设备分辨率低一级的目录开始依次往下找。
3、values适配过程:同layout。