我是android的新手,我知道这个问题已经被问到但是我无法得到满意的解释。 我的怀疑是:
我希望问题清楚,如果不是,请在评论中说明。
答案 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.