Ber*_*yle 3 android android-layout layout-inflater android-view
LayoutInflater
Android中到底是什么?使用它的目的方法是什么?我可以找到不同类型的用法,但在我的情况下无法找到哪一个套件.
关于这个问题
关于正确使用该inflate()
方法,我有很多困惑.在互联网上进行研究时,大多数结果都是错误的或不完整的.即使是官方文件也很模糊.这篇文章是我在不同地方可以找到的内容的总结.我相信这对像我这样的初学者会有所帮助
Ber*_*yle 10
LayoutInflater
是一个用于从布局资源(xml)文件或其节点(XmlPullParser
对象)创建视图的类.
这些可以表示单个视图或视图层次结构.
要给视图充气,我们需要一个LayoutInflater
对象.我们通常使用其中一种方法来获取具有上下文的现有对象,而不是创建新对象.
LayoutInflater#from(Context context)
Activity#getLayoutInflater()
Context#getSystemService(Class<T> serviceClass)
Context#getSystemService(String name)
第一个是最常用的,因为它简单.
以下是最后两种方法的示例用法.
LayoutInflater inflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE)
LayoutInflater inflater = (LayoutInflater)getSystemService(LayoutInflater.class)
Run Code Online (Sandbox Code Playgroud)
要扩大视图,LayoutInflater#inflate()
可以使用方法.它有四种形式,如下所示.如果源是布局资源,则可以使用前两种方法之一.如果源是布局资源节点,则使用最后两个方法.
View inflate(int resource, ViewGroup root, boolean attachToRoot)
View inflate(XmlPullParser parser, ViewGroup root, boolean attachToRoot)
root:它是一个ViewGroup,新创建的视图层次结构将附加到该ViewGroup.
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.
Run Code Online (Sandbox Code Playgroud)
如果attachToRoot
为true,则结果将是根视图.否则它将是新创建的视图层次结构.
从理论上讲,所有这些方法都返回相同的东西 - 根视图.但是,对我们来说,它们并不相同.是吗?
可以看出,即使已知root,也将其设置为null.如果attachToRoot
是,则root可以为null false
.但是,应该尽可能给它,因为它用于创建正确的子类LayoutParams
.
归档时间: |
|
查看次数: |
1792 次 |
最近记录: |