inflate 参数 的解释

Posted lsfv

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了inflate 参数 的解释相关的知识,希望对你有一定的参考价值。

root,和attachToRoot 2个参数有4种组合,但是有一组合无意义。
感觉这个函数写的太废了。非常明显 boolean attachToRoot,这个参数 放在前面,root在后面更好理解一点。
是否要附加根节点上,之后在看跟节点是否为空。难道是英文的语法导致??i go first!
attachToRoot
root  
true null 无意义
true not null xml 再套一个viewgroup。  这样最后,应该就2个相同的viewgroup了吧。  用在特殊情况下
false null 直接返回xml。  这种情况下  xml内的根点的宽高属性,就会变成默认的warp_context值。一般不用
false not null 只需要xml 的外层的父group布局类型,一般使用这种。设计的时候一般是这种思路,xml和外层是同一个布局类型。这样好衔接










干脆自己封下。省的去记毫无用处的知识点。这些设置类的知识点。变化太大。记住没有任何用作。
//activity helper
    public static class LS_Activity
    
        
        public static View inflast_Normal(Context context,int rid,ViewGroup viewGroup)
        
            return LayoutInflater.from(context).inflate(rid, viewGroup,false);
        

        public static View inflast_WrapFather(Context context,int rid,ViewGroup viewGroup)
        
            return LayoutInflater.from(context).inflate(rid, viewGroup,true);
        

        public static View inflast_ClearArrer(Context context,int rid)
        
            return LayoutInflater.from(context).inflate(rid, null,false);
        
    

 




源代码减缩。
public View inflate(XmlPullParser parser, @Nullable ViewGroup root, boolean attachToRoot) 
       
            final Context inflaterContext = mContext;
            Context lastContext = (Context) mConstructorArgs[0];
            mConstructorArgs[0] = inflaterContext;
            
            final AttributeSet attrs = Xml.asAttributeSet(parser);
            View result = root;

            int type=getXmlPullParser.START_TAG;// Look for the root node.
            final String name = parser.getName();
            if (TAG_MERGE.equals(name) && root != null && attachToRoot==true) //如果xml的根节点是merge.
            
                rInflate(parser, root, inflaterContext, attrs, false);
             
            else 
            
                final View temp = createViewFromTag(root, name, inflaterContext, attrs);
                ViewGroup.LayoutParams params = null;

                if (root != null && attachToRoot==false)//用xml的作为根节点,并且附加参数。
                
                    params = root.generateLayoutParams(attrs);
                    temp.setLayoutParams(params);
                    rInflateChildren(parser, temp, attrs, true);
                
                else if(root != null && attachToRoot==true)//用xml上层作为根节点,并且使用上层的布局类型。
                
                    root.addView(temp, params);
                
                else if(root == null || attachToRoot==false)//用xml的作为根节点
                
                    result = temp;
                
            

            
            return result;
    

 

以上是关于inflate 参数 的解释的主要内容,如果未能解决你的问题,请参考以下文章

Android layoutInflate.inflate 方法具体解释,removeView()错误解决

LayoutInflater类的inflate方法中的第二个参数怎么用,Android

LayoutInflater.inflate()方法的ViewGroup参数问题

LayoutInflater.inflate()方法的ViewGroup参数问题

LayoutInflater.inflate() 参数研究

三个案例带你看懂LayoutInflater中inflate方法两个参数和三个参数的区别