在执行LayoutInflater.inflate()方法的时候会去解析xml文件。创建每个视图对象。
我们在设置View的位置大小的时候,经常需要用到一个叫LayoutParams的东西,并且我们在使用这个LayoutParams的时候经常要判断他的LayoutParams对象是不是他的父类.LayoutParams。那么问题来了,这个LayoutParams到底是什么时候创建的,他为啥必须是父类的LayoutParams。
为了解决这个问题,我们就需要看view对象创建出来的代码了。也就是在调用LayoutInflater.inflate方法。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| public View inflate(@LayoutRes int resource, @Nullable ViewGroup root, boolean attachToRoot) { View view = tryInflatePrecompiled(resource, res, root, attachToRoot); }
View tryInflatePrecompiled(@LayoutRes int resource, Resources res, @Nullable ViewGroup root, View view = (View) inflater.invoke(null, mContext, resource); XmlResourceParser parser = res.getLayout(resource); try { AttributeSet attrs = Xml.asAttributeSet(parser); advanceToRootNode(parser); ViewGroup.LayoutParams params = root.generateLayoutParams(attrs); if (attachToRoot) { root.addView(view, params); } else { view.setLayoutParams(params); } return null; }
|
通过上面这个代码可以看到调用了父类的generateLayoutParams
方法去创建了LayoutParams对象。
1 2 3 4
| public LayoutParams generateLayoutParams(AttributeSet attrs) { return new LayoutParams(getContext(), attrs); }
|