31

我无法理解 LayoutInflater 在 Android 中的使用。

LayoutInflater 的作用究竟是什么,以及如何将它用于一个简单的 Android 应用程序?

4

5 回答 5

56

什么是 Layoutinflater ?

LayoutInflater是一个类(一些实现或服务的包装器),你可以得到一个:

LayoutInflater li = LayoutInflater.from(context);

如何使用 Layoutinflater ?

你给它一个 XML 布局文件。您无需提供完整的文件地址,只需提供在R课堂上自动为您生成的资源 id。例如,一个布局文件看起来像:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="vertical"
              android:layout_width="fill_parent"
              android:layout_height="fill_parent">

    <TextView
            android:id="@+id/text_view"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"/>

</LinearLayout>

另存为/res/layout/my_layout.xml.

你给它LayoutInflater喜欢:

  View v = li.inflate(R.layout.my_layout,null,false);

Layout Inflater 做了什么?

v现在是一个LinearLayout对象( LinearLayoutextends View),并且包含一个TextView对象,按照准确的顺序排列并设置了所有属性,正如我们在上面的 XML 中描述的那样。


TL;DR: ALayoutInflater读取了一个 XML,我们在其中描述了我们想要的 UI 布局。View然后它从该 XML 为 UI创建实际对象。

于 2013-06-14T06:14:03.560 回答
13

当你跑的时候setContentView(layout file name),你就可以跑findViewById(id of the widget)。你不需要做类似的事情xyz.findViewById。您的应用程序的上下文设置为该布局文件,所有findBiewById调用都将引用该布局文件。

在某些情况下,您需要再选择一个布局文件,例如 CustomDialog、ListElement 或 Custom Toast。这时候你不会想只为这些小的 UI 组件创建一个 Activity,那个时候你需要以编程方式获取对你的布局文件的编程引用,以便你可以在其上运行 findViewById。

充气,像气球一样吹出布局,给你一个气球,让你在它周围观察所有颜色和绘制在它上面的对象:)。Inflate 为您提供对该布局的对象引用以调用 findViewById。

希望这能清除。

于 2013-06-14T05:55:41.653 回答
5

LayoutInflater 的一些基础知识-

  • LayoutInflater 用于使用预定义的 XML 布局操作 Android 屏幕。
  • 此类用于将布局 XML 文件实例化为其对应的 View 对象。

  • 它从不直接使用。反而,

  • 使用getLayoutInflater()getSystemService(String)检索已经连接到当前上下文的标准 LayoutInflater 实例。
于 2013-06-14T06:08:18.763 回答
2

来自 Android 文档:

将布局 XML 文件实例化为其对应的 View 对象。它从不直接使用。相反,使用 getLayoutInflater() 或 getSystemService(String) 来检索标准 LayoutInflater 实例,该实例已连接到当前上下文并为您正在运行的设备正确配置。例如:

LayoutInflater inflater = (LayoutInflater)context.getSystemService
      (Context.LAYOUT_INFLATER_SERVICE);

在创建自定义视图时很有用

于 2013-06-14T05:57:35.473 回答
0

它最有可能被关闭,但布局充气器的作用是view从提供的布局文件创建一个

View row=getLayoutInflater.inflate(R.layout.list_item,parent,false);

它正在从R.layout.list_item文件中创建视图并证明这一点view

于 2013-06-14T05:54:26.633 回答