方法 inflate(int resource, ViewGroup root, boolean attachToRoot) 中,前连个参数都好理解,我比较费解的是第3个参数。
文档中的解释是:Whether the inflated hierarchy should be attached to the root parameter If false, root is only used to create the correct subclass of LayoutParams for the root view in the XML
LayoutInflater作用是将layout的xml布局文件实例化为View类对象。通俗的说, LayoutInflater的inflate函数就相当于将一个xml中定义的布局找出来,变成一个实例以供使用。
实例化LayoutInfater有三种方式:
然后可以调用其inflate方法实例化xml文件了:
setContentView和inflate的区别:
setContentView()一旦调用, layout就会立刻显示UI;而inflate只会把Layout形成一个以view类实现成的对象,在有需要的时候再用setContentView(view)显示出来。
比如一般在activity中通过setContentView()将界面显示出来,但是如果在非activity中如何对控件布局设置 *** 作了,这就需要LayoutInflater动态加载。
又比如如果你的Activity里如果用到别的layout,比如对话框的layout,而且你还要设置对话框上的layout里的组件(像ImageView,文字TextView)上的内容,你就必须用inflate()先将对话框的layout找出来,然后再用这个layout对象去找到它上面的组件(使用这个layout对象的findViewById方法)
通俗的说,inflate就相当于将一个xml中定义的布局找出来
因为在一个Activity里如果直接用findViewById()的话,对应的是setConentView()的那个layout里的组件
因此如果你的
Activity里如果用到别的layout,比如对话框上的layout,你还要设置对话框上的layout里的组件(像
ImageView,文字TextView)上的内容,你就必须用inflate()先将对话框上的layout找出来,然后再用这个layout对象去
找到它上面的组件,如:
View view = Viewinflate(this, Rlayoutdialog_layout, null);
TextView dialogTV = (TextView) viewfindViewById(Riddialog_tv);
dialogTVsetText("abcd");
如果组件Riddialog_tv是对话框上的组件,而你直接用thisfindViewById(Riddialog_tv),那么返回值将是null
三种方式可以生成LayoutInflater :
LayoutInflater inflater = LayoutInflaterfrom(this);
LayoutInflater inflater = getLayoutInflater();
LayoutInflater inflater = (LayoutInflater) thisgetSystemService(LAYOUT_INFLATER_SERVICE);
然后调用inflate方法将xml布局文件转成View
public View inflate (int resource, ViewGroup root, boolean attachToRoot)
在View类中,也有inflate方法
public static View inflate (Context context, int resource, ViewGroup root)
findViewById有两种形式
Rlayoutxx是引用res/layout/xxxml的布局文件(inflate 方法),Ridxx是引用布局文件里面的组件,组件的id是xx(findViewById方法)。
所有的组件id都能用Ridxx来查看,但是组件不在setContentView()里面的layout中就无法使用,ActivityfindViewById()会出现空指针异常
a activity中的findViewById(int id)
b View 中的findViewById(int id)
不同点是LayoutInflater是用来找layout下xml布局文件,并且实例化!而findViewById()是找具体xml下的具体
widget控件(如:Button,TextView等)。
当View中所有的子控件均被映射成xml后触发;
MyView mv = (MyView)Viewinflate (context,Rlayoutmy_view,null);
当加载完成xml后,就会执行那个方法;
我们一般使用View的流程是在onCreate中使用setContentView来设置要显示Layout文件或直接创建一个View,在当设置了ContentView之后系统会对这个View进行解析,然后回调当前视图View中的onFinishInflate方法。只有解析了这个View我们才能在这个View容器中获取到拥有Id的组件,同样因为系统解析完View之后才会调用onFinishInflate方法,所以我们自定义组件时可以onFinishInflate方法中获取指定子View的引用。
以上就是关于Android的View的inflate()方法的第3个参数是什么全部的内容,包括:Android的View的inflate()方法的第3个参数是什么、LayoutInflater的inflate函数用法、setContentView,findViewById 和 inflate 的区别等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)