LayoutInflater类有什么作用? (在Android中)

时间:2013-06-14 05:49:45

标签: android android-layout

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

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

5 个答案:

答案 0 :(得分:52)

什么是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对象LinearLayout扩展View,并包含TextView个对象,已安排按照确切的顺序和所有属性设置,我们在上面的XML中描述了


TL; DR: A LayoutInflater读取XML,我们在其中描述了UI布局的方式。然后,它从该XML为UI创建实际的View对象。

答案 1 :(得分:13)

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

有些情况下,您需要再获取一个布局文件,例如CustomDialog,ListElement或Custom Toast。此时你不想为这些小的UI组件创建一个Activity,那个时候你需要以编程方式获得对你的布局文件的编程引用,这样你就可以在它上面运行findViewById。

膨胀,像气球一样吹动布局并给你气球,让你可以看到它周围的所有颜色和物体:)。 Inflate为您提供对该布局的对象引用,以便调用findViewById。

希望这清楚。

答案 2 :(得分:5)

LayoutInflater的一些基础知识 -

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

  • 永远不会直接使用。取而代之的是,

  • 使用getLayoutInflater()getSystemService(String)检索已连接到当前上下文的标准LayoutInflater实例。

答案 3 :(得分:2)

来自Android文档:

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

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

用于创建自定义视图

See

答案 4 :(得分:0)

最有可能关闭,但布局inflater的作用是从提供的布局文件中创建view

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

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