Android布局万能适配思路

思路:了解View的绘制流程

View中的onMeasure方法,但是真正实现测量的方法是measure(int widthMeasureSpec, int heightMeasureSpec),在下图执行了onMeasure方法
Android布局万能适配思路_第1张图片
image.png

View在更新布局的时候调用的是requestLayout方法
Android布局万能适配思路_第2张图片
image.png

进入ViewRootImpl中找到performTraversals()方法
Android布局万能适配思路_第3张图片
image.png
Android布局万能适配思路_第4张图片
image.png

在performMeasure中可以看到调用了View.measure方法
Android布局万能适配思路_第5张图片
image.png

那么在LayoutInflater中又做了哪些事?可以找到rInflate(XmlPullParser parser, View parent, Context context, AttributeSet attrs, boolean finishInflate)这里进行了xml的解析同时调用了ViewGroup的generateLayoutParams()方法,并且传入参数attrs这里是关键,源码真的是很多直接上代码~

首先自定义一个在xml中通用的rootView例如RelativeLayout重写onMeasure和generateLayoutParams方法如图
Android布局万能适配思路_第6张图片
image.png
Android布局万能适配思路_第7张图片
image.png

在UIUtils中需要得到缩放值,如果UI是以1080为标准,那么将当前设备分辨率与1080得到一个比例,用来和宽高等数值进行计算,这样就实现等比缩放了,当然要实现所有适配还需要比如padding、textsize等等...

github:https://github.com/389987790/ScreenAdapter

你可能感兴趣的:(Android布局万能适配思路)