LayoutInflater attachToroot参数是什么意思?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (33)

LayoutInflater.inflate文档是不看好的目的十分清楚我的attachToRoot参数。

attachToRoot:膨胀层次结构是否应附加到根参数?如果为false,则root仅用于为XML中的根视图创建LayoutParams的正确子类。

是否有人可以更详细地解释,特别是根视图是什么,并且可能会显示一个行为truefalse值之间的变化的例子?

提问于
用户回答回答于

似乎在响应中有很多文本,但没有代码:

如果设置为true,那么当布局膨胀时,它将自动添加到作为子项的第二个参数中指定的ViewGroup的视图层次结构中。

代码中的实际含义是什么(大多数程序员理解的是):

public class MyCustomLayout extends LinearLayout {
    public MyCustomLayout(Context context) {
        super(context);
        // Inflate the view from the layout resource and pass it as child of mine (Notice I'm a LinearLayout class).

        LayoutInflater.from(context).inflate(R.layout.child_view, this, true);
    }
}

请注意,以前的代码是因为param是将布局添加R.layout.child_view为child的MyCustomLayout,并且以与编程方式使用相同的方式分配父级的布局参数,或者如果我在xml中执行了此操作:attachToRoottrueaddView

<LinearLayout> <View.../> ... </LinearLayout>

下面的代码经过时解释情况attachRootfalse

LinearLayout linearLayout = new LinearLayout(context);
linearLayout.setLayoutParams(new LayoutParams(
    LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
linearLayout.setOrientation(LinearLayout.VERTICAL);
    // Create a stand-alone view
View myView = LayoutInflater.from(context)
    .inflate(R.layout.ownRootView, null, false);
linearLayout.addView(myView);

在前面的代码中,你指定你想myView成为它自己的根对象,并且不会将它附加到任何父对象上,之后我们将它添加为它的一部分,LinearLayout但是暂时它是一个独立的(无父对象)视图。

碎片也会发生同样的情况,您可以将它们添加到已经存在的组中,并成为它的一部分,或者只传递参数:

inflater.inflate(R.layout.fragment,null,false);

指定它将是它自己的根。

用户回答回答于

如果设置为true,那么当布局膨胀时,它将自动添加到第二个参数中指定的ViewGroup的视图层次结构中作为子项。例如,如果根参数是a,LinearLayout那么您的充气视图将自动添加为该视图的子视图。

如果它被设置为false,那么你的布局将被夸大,但不会被附加到任何其他布局(所以它不会被绘制,接收触摸事件等)。

扫码关注云+社区