Inflater在Android中的英文意思是“膨胀”,实际上它的作用类似于findViewById(),但有所不同。findViewById()用于查找具体某个xml文件下的widget控件(如Button、TextView等),而Inflater则是用来加载layout文件夹下的xml布局文件并实例化它们。
获取Inflater的方法有三种:
1. 通过静态函数Context context)获取:
```java
static LayoutInflater (Context context);
```
2. 通过服务获取:
3. 调用Activity的()函数获取LayoutInflater对象。
setContentView和inflate的区别在于,setContentView()方法一旦调用,layout就会立刻显示UI;而inflate方法只是将Layout形成一个以view类实现成的对象,需要时再用setContentView(view)显示出来。
通常情况下,我们使用Inflater来完成以下操作之一:
- inflate方法总共有四种形式,目的都是把xml表述的layout转化为View对象。其中比较常用的是View inflate(int resource, ViewGroup root)。resource表示资源/layout文件在R文件中对应的ID,这个必须指定。而ViewGroup root则可以是null,null时就只创建一个resource对应的View,不是null时,会将创建的view自动加为root的child。
例如,下面的代码展示了如何使用Inflater加载一个名为tview的TextView控件:
```xml
android:id="@+id/tview" android:layout_width="fill_parent" android:layout_height="wrap_content" /> ``` 以下是重构后的代码: ```java // 定义布局文件中的控件ID int textViewId = R.id.tview; int buttonId = R.id.button; // 在程序中动态加载布局文件 LayoutInflater flater = LayoutInflater.from(this); View view = flater.inflate(R.layout.example, null); // 获取布局中的控件 TextView textView = (TextView) view.findViewById(textViewId); Button button = (Button) view.findViewById(buttonId); ``` 解析: 1. 首先,我们需要在代码中定义布局文件中的控件ID。在这个例子中,我们定义了两个ID:`textViewId` 和 `buttonId`,分别对应布局文件中的 `TextView` 和 `Button` 控件。 2. 接下来,我们使用 `LayoutInflater` 的 `inflate` 方法将布局文件转换为一个 `View` 对象。这个方法接受两个参数:布局文件的资源ID和一个可选的容器视图。在这个例子中,我们将布局文件的资源ID设置为 `R.layout.example`,并将容器视图设置为 `null`。 3. 然后,我们使用 `findViewById` 方法从 `View` 对象中获取布局文件中的控件。这个方法接受一个控件ID作为参数,并返回对应的控件对象。在这个例子中,我们分别获取了 `TextView` 和 `Button` 控件。