美文网首页Android知识
LayoutInflate用法和解析

LayoutInflate用法和解析

作者: cookie123 | 来源:发表于2016-09-13 23:40 被阅读641次

    LayoutInflate

    一、是什么?

    LayoutInflate就是传说中的布局泵,是用来找res/layout/下的xml布局文件,并且实例化;而findViewById()是找xml布局文件下的具体widget控件(如Button、TextView等)。

    二、实例化方法

    LayoutInflater 实例的三种方式:

    1. LayoutInflater inflater = getLayoutInflater();//调用Activity的getLayoutInflater()

    2. LayoutInflater inflater = LayoutInflater.from(context);

    3. LayoutInflater inflater =  (LayoutInflater)context.getSystemService

    另外getSystemService()是Android很重要的一个API,它是Activity的一个方法,根据传入的NAME来取得对应的Object,然后转换成相应的服务对象。所以,必须在activity的上下文环境下才能使用布局泵,不是想在哪里用就可以用的·;

    三、加载布局  inflate(int resource, ViewGroup root,boolean attachToRoot);

    1、 Inflate(resId , null )不能正确处理宽和高是因为:layout_width,layout_height是相对了父级设置的,必须与父级的LayoutParams一致。而加载的view的getLayoutParams为null,不正常显示,源码分析主要是没有设置setLayoutParams(params);

    2、Inflate(resId , parent,false)加载的view 可以正确处理,因为加载的view设置了setLayoutParams(params);这个params正是父类布局generateLayoutParams(attrs);得到的,正常显示,原来参数设成什么就是什么

    3、Inflate(resId , parent,true )不仅不能够正确的处理,并且返回的是parent,和以上两者返回值有绝对的区别;

    4、部分源码解析

    1、默认返回的view 为 View result=root;root为传进去的root;

    2、如果root为true 且attachToRoot则temp.setLayoutParams(params);

    if(root!=null) {

    params=root.generateLayoutParams(attrs);

    if(!attachToRoot) {

    temp.setLayoutParams(params);

    }

    3、

    final View temp= createViewFromTag(root,name,attrs,false); 从xml解析出来的view,及我们要显示的view

    4、如果root为null或者attachToRoot为false,则返回的view 就是我们要显示的view而不是父类view root

    // Decide whether to return the root that was passed in or the

    // top view found in xml.

    if(root==null|| !attachToRoot) {

    result=temp;

    }

    5、总结

    使用 inflate(int resource, ViewGroup root,boolean attachToRoot);,一看父类root是谁,而看attachToRoot是否为true,如果要显示的布局为 FrameLayout->button,传入的root为FrameLayout,则返回的就是这个FrameLayout;

    6、参考博客

    http://blog.csdn.net/lmj623565791/article/details/38171465

    http://www.cnblogs.com/top5/archive/2012/05/04/2482328.html

    相关文章

      网友评论

        本文标题:LayoutInflate用法和解析

        本文链接:https://www.haomeiwen.com/subject/pwqvettx.html