在实际开发中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 等)。
相关推荐
`LayoutInflater`还提供了`cloneInContext()`方法,用于创建一个新的`LayoutInflater`实例,该实例具有与原始实例相同的布局工厂和标签前缀,但其上下文被替换为指定的新上下文,这对于处理多线程或在不同上下文中...
`LayoutInflater`的核心是`inflate()`方法,它解析XML布局文件,并使用`createView()`创建对应的视图对象。在嵌套的情况下,`inflate()`会递归地处理XML中包含的子视图,包括其他`LayoutInflater`实例。 最后,`...
在本文中,我们将深入探讨LayoutInflater的工作原理、使用方法以及如何获取其实例。 首先,LayoutInflater的作用在于将XML布局资源解析并转换为Android视图对象(View或ViewGroup)。与`findViewById()`不同,`...
在Android应用程序中,我们通常使用XML来定义用户界面的布局,而`LayoutInflater`则起到了桥梁的作用,将静态的XML布局文件转换成可交互的UI组件。 `LayoutInflater`的基本用法包括以下步骤: 1. **获取实例**:...
ListView通常使用Adapter,其中`getView`方法会调用`LayoutInflater`来创建和复用视图。通过合理使用`inflate`方法,可以有效地管理内存,提高应用性能。 总之,理解`LayoutInflater`的`inflate`方法及其参数是...
首先,`LayoutInflater`通常从资源ID获取,可以使用`getSystemService()`方法和`Context.LAYOUT_INFLATER_SERVICE`常量来获取: ```java LayoutInflater inflater = (LayoutInflater) getSystemService(Context....
2. **使用方法**:通过`LayoutInflater.from(Context)`获取LayoutInflater实例,然后调用`inflate()`方法加载布局。 3. **inflate()方法**:接受两个参数,第一个是XML布局资源ID,第二个是父视图,用于确定布局的...
`LayoutInflater.Factory`的使用使得我们能够在创建View时根据当前主题应用相应的样式,提供了一种灵活且高效的方式来实现主题切换。在实际项目中,你可能还需要考虑缓存已创建的View,避免不必要的性能开销,以及...
LayoutInflater 的使用方法有三种: 1. 由 LayoutInflater 的静态函数:from(Context context) 获取: ```java LayoutInflater inflater = LayoutInflater.from(this); View view = inflater.inflate(R.layout.ID,...
本文将深入探讨`LayoutInflater.from(context).inflate()`的工作原理、使用方法以及一些最佳实践。 首先,`LayoutInflater`是Android提供的一个类,它的主要任务是将XML布局文件解析成对应的View或ViewGroup对象。`...
`LayoutInflater`的使用方法: 通常有两种方式来获取`LayoutInflater`实例: 1. 使用`LayoutInflater.from(Context context)`静态方法: ```java LayoutInflater inflater = LayoutInflater.from(this); View view =...
下面我们将详细介绍 LayoutInflater 的使用方法和原理。 一、LayoutInflater 的获取 LayoutInflater 的实例可以通过多种方式获取,但最终都是通过 Context.getSystemService(Context.LAYOUT_INFLATER_SERVICE) 来...
在Android应用开发中,我们通常使用LayoutInflater来动态地加载和插入布局,这在创建自定义视图、处理动态数据或者在运行时创建视图时非常有用。本文将深入解析LayoutInflater的工作原理,并提供实例代码来帮助理解...
自定义 Toast 主要有两种方法:一种是使用 Toast 的 setView() 方法将自定义的 View 添加到 Toast 中,另一种是使用 LayoutInflater.inflate() 方法将自定义的布局文件 inflate 到 View 中,然后将其添加到 Toast 中...
在实际开发中,LayoutInflater还有一些高级用法,比如通过`createView()`方法自定义View的创建过程,或者使用LayoutInflater的Factory和Factory2接口来控制View的实例化过程,从而实现更灵活的布局管理。 总的来说...