在布局inflater中“附加到root”有什么用?

时间:2014-03-11 12:52:46

标签: android android-view

我是android的新手,我知道这个问题已经被问到但是我无法得到满意的解释。 我的怀疑是:

  1. 什么是“附加到根”,如果可能的话,用于小的 并且清楚的例子。
  2. 当我搜索答案时,人们说其可选用于 附加到父视图组,视图组层次结构是什么?(是 考虑我们以编程方式创建的视图或者是那种视图 还考虑了已在xml文件中声明的视图)
  3. 我希望问题清楚,如果不是,请在评论中说明。

4 个答案:

答案 0 :(得分:27)

我自己也对attachToRoot方法中inflate的真正目的感到困惑。经过一些UI研究后,我终于得到了答案:

父级:

在这种情况下,

是使用findViewById()围绕要膨胀的视图对象的窗口小部件/布局。

attachToRoot:

将视图附加到其父级(包括它们在父级层次结构中),因此视图接收的任何触摸事件也将转移到父视图。现在它是由父母决定是否要接受这些事件或忽略它们。如果设置为false,它们不会被添加为父母的直接子女,父母也不会接受任何接触来自观点的事件。

希望这能解决困惑

答案 1 :(得分:1)

如果您将ViewGroup传递给它,则会将夸大的View添加到该ViewGroup。这意味着,膨胀的View将是传递的ViewGroup的孩子。

无论是以编程方式还是通过xml文件创建ViewGroup,都无关紧要。

答案 2 :(得分:1)

inflate方法中的第三个参数是布尔返回类型 在选择参数的值时,会有很多混淆(很快会得到这个部分)。

简单
1)当 attachToRoot = false 时,表示

  

不要将子视图附加到父“立即”,稍后再添加。

2)当 attachToRoot = true 时,表示

  

将childView附加到父级“Right Now”。

在这两种情况下,子视图最终都会添加到parentView中。 这只是时间问题。
如果您想要阅读更多详细信息,可以参考--->>> this回答
   (因为我不能在这里发布重复的答案,只是想帮忙)。

答案 3 :(得分:0)

例如:

  

ChildView:TextView

     

Parent(Container)View:LinearLayout

如果附加到root = true

val view = layoutInflater.inflate(R.layout.child, containerView, true)
// Not need  -> containerView.addView(view) 
// This view will be LinearLayout. Not Textview. 

如果附加到root = false

val view = layoutInflater.inflate(R.layout.child, containerView, false)
containerView.addView(view) // we should add
// This view will be TextView.