思路:了解View的绘制流程
View中的onMeasure方法,但是真正实现测量的方法是measure(int widthMeasureSpec, int heightMeasureSpec),在下图执行了onMeasure方法![](https://img.haomeiwen.com/i1621451/08659a8523b91b47.png)
![](https://img.haomeiwen.com/i1621451/3012098651b76e9e.png)
![](https://img.haomeiwen.com/i1621451/b5a21bb87016bebc.png)
![](https://img.haomeiwen.com/i1621451/7980560b5f6b406f.png)
![](https://img.haomeiwen.com/i1621451/d558ae756e0b1af8.png)
那么在LayoutInflater中又做了哪些事?可以找到rInflate(XmlPullParser parser, View parent, Context context, AttributeSet attrs, boolean finishInflate)这里进行了xml的解析同时调用了ViewGroup的generateLayoutParams()方法,并且传入参数attrs这里是关键,源码真的是很多直接上代码~
首先自定义一个在xml中通用的rootView例如RelativeLayout重写onMeasure和generateLayoutParams方法如图![](https://img.haomeiwen.com/i1621451/519b7292d2bc9cc2.png)
![](https://img.haomeiwen.com/i1621451/bca3725cfb6579b0.png)
在UIUtils中需要得到缩放值,如果UI是以1080为标准,那么将当前设备分辨率与1080得到一个比例,用来和宽高等数值进行计算,这样就实现等比缩放了,当然要实现所有适配还需要比如padding、textsize等等...
网友评论