Android屏幕适配-基础概念
Android屏幕适配-适配方案选择
dp直接适配方案:
含义:dp+weight+ConstractLayout
优点:解决90%适配问题。
缺点:1.相同分辨率不同屏幕像素密度出现偏差。2.无法与设计师统一单位,或者说耗费大量力气找一个估算值转换尺寸。
宽高限定符方案:
含义:穷举市面宽高像素值。以UI设计图为基准分辨率,将任何分辨率分成基准分辨率分数,其他分辨率根据基准分辨率计算。
表达:values-480*320
编写:设计图的320px,把最近的values-480*320等分320份,生成dimens。
优点:解决与设计师统一单位。
缺点:如果没有找到适配的dimens,会使用默认的dimens,容错机制很差。需要精准命中才能适配。
今日头条适配方案:
含义:通过修改density值之后,强行把所有不同尺寸分辨率的手机的宽度,换算成dp值为统一的值。
公式:当前设备屏幕总宽度(px)/设计图总宽度(dp)=density
如:设计图375dp,一个View50dp*50dp。
当屏幕宽度1080px,density=2.88,View=50dp*2.88=144px。屏幕占比144px/1080px=13.3%
当屏幕宽度1440px,density=3.84,View=50dp*3.84=192px。屏幕占比192px/1440px=13.3%
优点:1.使用成本的低。2.侵入性低,方案与项目完全解耦。
缺点:1.配置为整个项目,会与第三方库不适配。->以Activity为单位,适配其他方案。
2.以公司固定设计稿格式,在不使用这个方案后,density变为系统的dpi计算的density,会有偏差。
smalleastWidth适配方案:
含义:Android识别到可用宽度的dp值,识别结果去资源文件寻找对应限定符的文件夹下的资源文件。
如果找不到,会向下寻找。
公式:px/(dpi/160)=dp
如:设计图375dp,一个View50dp*50dp。
当屏幕宽度1080px,dpi为480。1080/(480/160)=360。使用values-sw360dp,360/375=0.96,为48dp。48*(480/160)=144px。144px/1080px=0.133
当屏幕宽度1080px,dpi为420。1080/(420/160)=411.429。使用values-sw411dp,411/375=1.096,为54.8dp。54.8*(420/160)=143.85px。144px/1080px=0.133
表达:values-sw320dp
编写:设计图的375px,把最近的values-sw360dp等分375份,生成dimens。
优点:1.解决宽高限定符方案的容错问题。2.不会影响第三方库。
缺点:1.最小Android3.2以上。
2.侵入性高,每个layout都有大量dimens引用,切换成本高。
3.增大了apk体积,根据生成的dimens文件增大300kb-800kb。sp如果适配,横竖屏切换适配,也需要生成一些列dimens。增大体积。
4.不能以高度适配。