屏幕适配的文章已经有很多了,虽说有很多五花八门的适配方式。但是万变不离其宗,核心只有一个,就是算出dpi,再算出系数,再想办法以当前手机分辨率去乘以这个系数,无论是dimen,还是自定义布局获取子控件大小还是控制符sw
本片主要以以下三点作为讲解
A.基础部分和核心理念
B.常用适配方式分析以及优缺点
C.注意事项
A.基础部分和核心理念
1. 基础部分就略过了,整理出了一篇xmind,需要的朋友自行下载
2.核心
px才是最小计算单位,也是最好的适配方式
Android自身有一套规则,160dpi为基准,1dp=1px或者1dip=1px
而其显示规则(原理):假设机器的分辨率是1280*1080,尺寸为5,按照公式算出来的dpi为442,➗160得到的系数为2.75。如果在布局中写的100dp,那么在这台机器中显示的值为275px,而在每台手机的dpi不同,则显示的值则不同(具体按照公式计算即可)。同一个dp值,则可能会产生适配问题,我们设置dp时,dp只是兼容像素密度的单位,内部实际上还是转换成px来计算。
B.常用适配方式分析以及优缺点
1.value
优点:可以算出实际的px,最常用的就是洪阳的jar包
原理:按照比例缩放,算出所有分辨率的px尺寸。
缺点:1.太多xml文件,导致apk体积较大
2.px固定的太死了,不便于维护
3.如果有特例屏(如虚拟按键等),要单独计算出xml
改良:用限定符sw,文件量可以缩小很多
2.限定符
a.屏幕尺寸
small 小屏幕
normal 基准屏幕
large 大屏幕
xlarge 超大屏幕
b.屏幕密度
ldpi <=120dpi
mdpi <= 160dpi
hdpi <= 240dpi
xhdpi <= 320dpi
xxhdpi <= 480dpi
xxhdpi <= 640dpi(只用来存放icon)
nodpi 与屏幕密度无关的资源.系统不会针对屏幕密度对其中资源进行压缩或者拉伸
tvdpi 介于mdpi与hdpi之间,特定针对213dpi,专门为电视准备的,手机应用开发不需要关心这个密度值.
c.屏幕方向
land 横向
port 纵向
d.屏幕宽高比
long 比标准屏幕宽高比明显的高或者宽的这样屏幕
notlong 和标准屏幕配置一样的屏幕宽高比
e.举例:
平板适配(layout-swXXdp) small width,多套layout
其中:layout-sw360dp即可适配大部分手机
例如 1920*1080的手机,5-6寸
算出dpi=500 系数500/160=3.125
对应分辨率的值为3.125 *360=1125
1125>1080,目前针对手机,宽度很少有超过1080
目前最大的手机屏幕分辨率2560 x 1440 5-6寸 dpi=587 系数3.6,值为1321,此时就要另算layout
3.自定义布局组件
运行时换算,消耗性能
4.自带插件ScreenMatch
5.百分比布局
UI一般是给px,但是sketch里面是可以显示出百分比。具体使用自行查阅
C.注意事项
- 大型APP都会采用px来进行适配。因为px是最基本的单元。
- dp不要去用
- 虚拟按键—–>计算出虚拟按键的高度的分辨率,减去即可
- 推荐使用sw的方式进行适配
- 调试时,直接输入adb shell wm size 360dpx780dp,即可改成对应的屏幕分辨率,不需要开启多个模拟器来测
adb shell wm size reset即可恢复
刘海屏,全面屏,异形屏,凹形屏等----->参照对应厂商官方教学即可