两种夸大儿童观点的方法有什么区别吗?

时间:2013-07-17 02:05:49

标签: android

第一种方法:

LinearLayout parent = ...;
View child = LayoutInflator.inflate(context, parent, true);

第二种方法:

LinearLayout parent = ...;
View child = LayoutInflator.inflate(context, null, false);
parent.addView(child);

有什么不同吗?

6 个答案:

答案 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行,父级使用布局参数添加子视图。

所以区别在于是否将布局参数设置为子视图