首页 > 其他分享 >LayoutInflater用法

LayoutInflater用法

时间:2022-10-10 21:03:57浏览次数:45  
标签:ViewGroup findViewById LayoutInflater 用法 context inflate View

在实际开发中LayoutInflater这个类还是非常有用的,它的作用类似于findViewById()。不同点是LayoutInflater是用来找res/layout/下的xml布局文件,并且实例化;而findViewById()是找xml布局文件下的具体widget控件(如Button、TextView等)。 具体作用: 1、对于一个没有被载入或者想要动态载入的界面,都需要使用LayoutInflater.inflate()来载入;
2、对于一个已经载入的界面,就可以使用Activiyt.findViewById()方法来获得其中的界面元素。
LayoutInflater 是一个抽象类,在文档中如下声明:
publicabstractclass LayoutInflater extends Object

获得 LayoutInflater 实例的三种方式
1.LayoutInflater inflater = getLayoutInflater(); //调用Activity的getLayoutInflater()
2.LayoutInflater localinflater =(LayoutInflater)context.getSystemService
(Context.LAYOUT_INFLATER_SERVICE);
3. LayoutInflater inflater = LayoutInflater.from(context);

其实,这三种方式本质是相同的,从源码中可以看出:
getLayoutInflater():
Activity 的 getLayoutInflater() 方法是调用 PhoneWindow 的getLayoutInflater()方法,看一下该源代码:







public PhoneWindow(Context context) { super(context); mLayoutInflater = LayoutInflater.from(context); }
可以看出它其实是调用 LayoutInflater.from(context)。

LayoutInflater.from(context):
publicstatic LayoutInflater from(Context context) { LayoutInflater LayoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); if (LayoutInflater == null) { thrownew AssertionError("LayoutInflater not found."); } return LayoutInflater; }
可以看出它其实调用 context.getSystemService()。

结论:所以这三种方式最终本质是都是调用的Context.getSystemService()。

inflate 方法 通过 sdk 的 api 文档,可以知道该方法有以下几种过载形式,返回值均是 View 对象,如下:







public View inflate (int resource, ViewGroup root) public View inflate (XmlPullParser parser, ViewGroup root) public View inflate (XmlPullParser parser, ViewGroup root, boolean attachToRoot) public View inflate (int resource, ViewGroup root, boolean attachToRoot)
示意代码:







LayoutInflater inflater = (LayoutInflater)getSystemService(LAYOUT_INFLATER_SERVICE); View view = inflater.inflate(R.layout.custom, (ViewGroup)findViewById(R.id.test)); //EditText editText = (EditText)findViewById(R.id.content);// error EditText editText = (EditText)view.findViewById(R.id.content);
对于上面代码,指定了第二个参数 ViewGroup root,当然你也可以设置为 null 值。
注意:
·inflate方法与 findViewById 方法不同;
·inflater 是用来找 res/layout下的 xml 布局文件,并且实例化;
·findViewById() 是找具体 xml 布局文件中的具体 widget 控件(如:Button、TextView 等)。

标签:ViewGroup,findViewById,LayoutInflater,用法,context,inflate,View
From: https://blog.51cto.com/u_15740686/5745273

相关文章

  • xargs 命令用法
    事例1:把文件结果做为参数,查看文件大小 cat1.txt|xargs-ils-hl{}-i 用{}代替传递的数据{} 作为cat的结果,在xargs作为一个参数ls:此处不支持命......
  • 【C语言_20】const与#define的用法及区别
    1.const关键词的用法const在实际编程中用得并不多,const是constant的缩写,意思是“恒定不变的”!它是定义只读(不能修改)变量的关键字,或者说const是定义常变量的关键字。......
  • export和export default区别用法
    区别1、在一个文件或模块中,export、import可以有多个,exportdefault仅有一个。2、通过export方式导出,在导入时要加{},且不能自定义名字,exportdefault不用加{},且可以自......
  • 16. JS for of循环语句的用法
    1.前言JSforof循环是ECMAScript6中新添加的一个循环方式,与 forin 循环类似,也是普通 for 循环的一种变体。使用forof循环可以轻松的遍历数组或者其它可遍历......
  • 14. JS for循环语句的用法
    1.前言前面我们简单介绍了 while 循环和 dowhile 循环,本节再来介绍另外一种循环——for循环。1.1 JSfor循环语法JSfor循环适合在已知循环次数时使用,语法格......
  • 13. JS do while循环语句的用法
    1.前言JSdowhile循环与 while循环非常相似,不同之处在于,dowhile循环会先执行循环中的代码,然后再对条件表达式进行判断。因此,无论条件表达式是真还是假,dowhile循......
  • 12. JS while循环语句的用法
    1.前言循环就是重复做一件事,在编写代码的过程中,我们经常会遇到一些需要反复执行的操作,例如遍历一些数据、重复输出某个字符串等,如果一行行的写那就太麻烦了,对于这种重复......
  • BigDecimal 用法总结
    转载请注明出处:目录1.BigDecimal简介2.构造BigDecimal的对象3.常用方法总结4.divide方法使用5.setScale方法使用6.BigDecimal数据库......
  • Java中StringBuffer的获取当前容量的方法capacity的用法
    我们都知道,java中字符串都是用String,内容和长度都是不可变的。如果想使用可变长度的,可以使用类StringBuffer该类的方法是安全的,可以保证线程安全   使用的过程中学......
  • .Net Framework中的AppDomain.AssemblyResolve事件的常见用法、问题,以及解决办法
    一、简述本文简要的介绍.NETFramework中System.AppDomain.AssemblyResolve事件的用法、使用注意事项,以及复杂场景下AssemblyResolve事件的污染问题和解决办法。......