第一种方法:
LinearLayout parent = ...;
View child = LayoutInflator.inflate(context, parent, true);
第二种方法:
LinearLayout parent = ...;
View child = LayoutInflator.inflate(context, null, false);
parent.addView(child);
有什么不同吗?
答案 0 :(得分:1)
根据Android Developer文档:
View child = LayoutInflator.inflate(context, parent, true);
将孩子添加到父母,
View child = LayoutInflator.inflate(context, null, false);
不会。
您可以查看参考资料:android.view.ViewGroup.inflate
答案 1 :(得分:1)
如果你检查膨胀方法的来源你会发现:
if (root != null) {
if (DEBUG) {
System.out.println("Creating params from root: " +
root);
}
// Create layout params that match root, if supplied
params = root.generateLayoutParams(attrs);
if (!attachToRoot) {
// Set the layout params for temp if we are not
// attaching. (If we are, we use addView, below)
temp.setLayoutParams(params);
}
}
/* ... */
// We are supposed to attach all the views we found (int temp)
// to root. Do that now.
if (root != null && attachToRoot) {
root.addView(temp, params);
}
所以在你的例子中没有区别。
这种情况会有所不同
View child = LayoutInflator.inflate(context, parent, false);
一个孩子将拥有与父母相同的LayoutParams,但它不会被附加,因此它只是单独的视图。
答案 2 :(得分:0)
区别在于您的第二个参数,它基本上告诉Android哪个View是您正在膨胀的视图的父视图。
在第一种情况下,View将被扩展到ViewGroup,它是“父”实例。在第二种情况下,新创建的View没有父级,并且将按原样膨胀。
答案 3 :(得分:0)
是 如果为True - :是否应将膨胀的层次结构附加到根参数?
如果为False - :如果为false,则root仅用于为XML中的根视图创建正确的LayoutParams子类。
当我们不想使用Adapter类在Listview中添加行时,通常会使用此参数 我们希望按视图或布局进行排序,他们有子视图,在这种情况下我们使用它。
答案 4 :(得分:0)
假设您已将context
资源ID称为要充气,这非常令人困惑。有以下区别:
使用布局资源顶层的布局参数,因为parent
布局参数。在第二种情况下,不会应用这些布局参数;
答案 5 :(得分:0)
来自source code,如下所示:
471 if (root != null) {
472 if (DEBUG) {
473 System.out.println("Creating params from root: " +
474 root);
475 }
476 // Create layout params that match root, if supplied
477 params = root.generateLayoutParams(attrs);
478 if (!attachToRoot) {
479 // Set the layout params for temp if we are not
480 // attaching. (If we are, we use addView, below)
481 temp.setLayoutParams(params);
482 }
483 }
484
485 if (DEBUG) {
486 System.out.println("-----> start inflating children");
487 }
488 // Inflate all children under temp
489 rInflate(parser, temp, attrs, true);
490 if (DEBUG) {
491 System.out.println("-----> done inflating children");
492 }
493
494 // We are supposed to attach all the views we found (int temp)
495 // to root. Do that now.
496 if (root != null && attachToRoot) {
497 root.addView(temp, params);
498 }
499
500 // Decide whether to return the root that was passed in or the
501 // top view found in xml.
502 if (root == null || !attachToRoot) {
503 result = temp;
504 }
从第471~482行开始,它将设置子视图的布局参数,创建与父视图匹配的新参数。
从第496~498行,父级使用布局参数添加子视图。
所以区别在于是否将布局参数设置为子视图