我无法理解在Android中使用LayoutInflater。
LayoutInflater的作用究竟是什么,以及如何将它用于简单的Android应用程序?
答案 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的一些基础知识 -
此类用于将布局XML文件实例化为其对应的View对象。
永远不会直接使用。取而代之的是,
getLayoutInflater()
或getSystemService(String)
检索已连接到当前上下文的标准LayoutInflater实例。答案 3 :(得分:2)
来自Android文档:
将布局XML文件实例化为其对应的View对象。它永远不会直接使用。相反,使用getLayoutInflater()或getSystemService(String)来检索已连接到当前上下文并为您运行的设备正确配置的标准LayoutInflater实例。例如:
LayoutInflater inflater = (LayoutInflater)context.getSystemService
(Context.LAYOUT_INFLATER_SERVICE);
用于创建自定义视图
答案 4 :(得分:0)
最有可能关闭,但布局inflater的作用是从提供的布局文件中创建view
View row=getLayoutInflater.inflate(R.layout.list_item,parent,false);
它正在从R.layout.list_item
文件创建视图并证明view
。