一:一些概念的理解:
屏幕尺寸:屏幕的对角线,如一台小米电视49寸说的就是电视对角线长度是49寸(1英寸=2.54厘米)
分辨率:
1920×1080指纵向1920个像素点,横向1080个像素点,1280*720同理
屏幕像素密度(DPI<Dots Per Inch>):
指每一英寸长度中,可显示输出的像素个数,假如一英寸里面有160个像素,这个屏幕的像素密度就是160dpi
DPI的数字受屏幕尺寸和分辨率所影响,DPI可以通过计算所得
dp,dip,sp,px它们之间的关系
px:
构成图像的最小单位,其实就是像素单位即分辨率单位,比如我们通常说的手机分辨列表800*400都是px的单位
dp/dip:
dip和dp是一个意思,都是Density Independent Pixels的缩写,即密度无关像素,规定以160dpi为基准,1dip=1px,如果密度是320dpi,则1dip=2px,以此类推。
也就是说当前我们设备的DP是由android给予的基础标准按比例进行翻译的,这也是为什么我们用DP能解决一部分适配的原因
desity
密度,表示一个dp多少个像素。desity = dpi/160
sp:同dp相似,sp作为字体大小单位,会随着系统的字体大小改变,而dp作为单位则不会。所以建议在字体大小的数值要使用sp作为单位
mdpi,hdpi,xdpi,xxdpi,xxxdpi?如何计算和区分
名称 像素密度范围 图标尺寸
mdpi 120dpi ~ 160dpi 48*48px
hdpi 160dpi ~ 240dpi 72*72px
xdpi 240dpi ~ 320dpi 96*96px
xxdpi 320dpi ~ 480dpi 144*144
xxxdpi 480dpi ~ 640dpi 192*192
在Google官方开发文档中,说明了 ** mdpi:hdpi:xhdpi:xxhdpi:xxxhdpi=2:3:4:6:8 ** 的尺寸比例进行缩放。例如,一个图标的大小为48×48dp,表示在mdpi上,实际大小为48×48px,在hdpi像素密度上,实际尺寸为mdpi上的1.5倍,即72×72px,以此类推,可以继续往后增加,不过一般情况下已经够用了,这种用来去适配手机和平板之间的图形问题
二:开始适配
1.常识性适配:
1.1.使用 "wrap_content" 和 "match_parent"
1.2.相对布局
1.3.. .9图的应用
2.其他适配:限定符(SW)
限定符:android在进行资源加载的时候,会根据屏幕信息加载对应文件夹名字所在的那个文件夹资源,这些特殊的资源文件夹名字就是限定符
简单说明:
SW全称是Smallest Width,表示最小宽度,例如一个适配文件夹values-sw411dp表示如果手机的最小宽度是411dp,那么就命中该文件夹,使用的配置都是这个文件夹下的。代码中可以用getResources().getConfiguration().smallestScreenWidthDp获取sw
sw的理论上计算原理
例如:已知一个5.1寸手机的分辨率为1440*2560,求sw?
sw = 1440/desity,desity = dpi/160,dpi = sqrt(1440x1440+2560x2560)/5.1
sw = 1440/desity,desity = dpi/160,dpi =576
sw = 1440/desity,desity = 3.6
sw = 400
理论上是这样的,实际真的是这样吗?
实际结果
调用getResources().getConfiguration().smallestScreenWidthDp获取结果是411,也就是说sw = 411dp,这个时候不淡定了,适配这个手机要用values-sw411dp而不是上面计算的values-sw400dp。
3,屏幕适配解决方法
3,1 第一种:自定义布局组件
其核心原理是根据一个参照分辨率进行布局(比如参照UI给的1080*1920),然后再各个机器上提取当前机器分辨率换算出系数之后,然后再通过重新测量的方式来达到适配的效果,这一套方案基本能适用于95以上的机型
3.2 第二种:Dimens适配
结合SW限定符计算得到:
300x400,5寸屏 的限定符SW=300PX/Desity=300PX/0.625=480
600x800,10寸屏 的限定符SW=600PX/Desity=600PX/0.625=960
所以就是SW480和SW960
下面使用Android官方给我们提供的插件ScreenMatch(具体使用详情百度一大堆.查一下就明白了)自动给我们生成SWXXX文件
自动生成了对应的dimens文件之后,在xml文件中就可以直接使用dimens,系统会根据手机去寻找对应文件夹下的dimens文件用作适配