Android 什么是LayoutFlater?如何正确使用它?

Android 什么是LayoutFlater?如何正确使用它?,android,android-layout,android-view,layout-inflater,Android,Android Layout,Android View,Layout Inflater,Android中的LayoutInflater到底是什么?使用它的预期方法是什么?我可以找到不同类型的用法,但无法找到适合我的情况 关于这个问题 对于inflate()方法的正确使用,我有很多困惑。当在互联网上进行研究时,大多数结果要么是错误的,要么是不完整的。即使是官方文件也很模糊。这篇文章是我在不同地方能找到的东西的总结。我相信这会对像我这样的初学者有所帮助什么是布局调整器? 用于从(xml)文件或其中的一个文件(XmlPullParserobjects)创建视图的类 这些可以是单个视图

Android中的
LayoutInflater
到底是什么?使用它的预期方法是什么?我可以找到不同类型的用法,但无法找到适合我的情况



关于这个问题

对于
inflate()
方法的正确使用,我有很多困惑。当在互联网上进行研究时,大多数结果要么是错误的,要么是不完整的。即使是官方文件也很模糊。这篇文章是我在不同地方能找到的东西的总结。我相信这会对像我这样的初学者有所帮助

什么是布局调整器? 用于从(xml)文件或其中的一个文件(
XmlPullParser
objects)创建视图的类

这些可以是单个视图或视图层次的表示


创建LayoutFlater对象 要使视图膨胀,我们需要一个
LayoutInflater
对象。我们通常使用这些方法中的一种来获取具有上下文的现有对象,而不是创建新对象

第一种是最常用的,因为它简单

下面是最后两种方法的示例用法

LayoutInflater inflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE)
LayoutInflater inflater = (LayoutInflater)getSystemService(LayoutInflater.class)

膨胀的观点 要对视图进行充气,可以使用
LayoutInflater#充气()
方法。它有以下四种形式。如果源是布局资源,则可以使用前两种方法之一。如果源是布局资源节点,则使用后两种方法

  • 根:它是一个视图组,新创建的视图层次将要附加到该视图组

    attachToRoot:第一个和第三个方法将新创建的视图层次结构在创建后附加到根目录。但是,如果您选择通过
    ViewGroup#addView()
    手动添加,或者应该在其他地方进行附加,则可以选择第二个或最后一个方法,并将
    attachToRoot
    设置为false
    例如,在
    Fragment
    onCreateView()
    内部,以及在创建一个视图作为
    RecyclerView
    itemView
    时。您应该在这两个位置将
    attachToRoot
    设置为
    false
    ,因为附加将在其他位置完成。如果我们将其设置为
    true
    ,或者在这些地方使用第一个或第三个方法,它将抛出一个错误

    java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.
    

    使用结果 如果
    attachToRoot
    为true,则结果将是根视图。否则,它将是新创建的视图层次结构

    理论上,所有这些方法都返回相同的东西-根视图。然而,对我们来说,它们并不相同。是吗


    一些常见错误
    可以看出,即使已知根,也可以将其设置为null。如果
    attachToRoot
    false
    ,则Root可以为null。但是,如果可能,应该给出它,因为它用于创建
    LayoutParams

    的正确子类,为什么称为充气器,为什么不称为创建者(例如)。为什么确切地说是这个词?@JohnnyFive这是因为在创建之后,它将新创建的视图附加(填充/膨胀)到其父视图中可用的位置,并将其用作最常用的表单(在其他表单中,此默认行为可以通过将attachToRoot传递为false来更改)