【问题标题】:what does 3rd parameter of public View inflate (int resource, ViewGroup root, boolean attachToRoot) do?public View inflate (int resource, ViewGroup root, boolean attachToRoot) 的第三个参数是做什么的?
【发布时间】:2017-01-01 12:55:13
【问题描述】:

According to android.developer.com

root 可选视图作为生成层次结构的父级(如果 attachToRoot 为真),或者只是一个提供一组 返回层次结构的根的 LayoutParams 值(如果 attachToRoot 是假的。)

attachToRoot是否膨胀层级 应该附加到根参数吗?如果为 false,则仅使用 root 为根视图创建LayoutParams 的正确子类 XML。

LayoutParams 的这个子类是什么?函数参数中提到的resource的布局参数怎么办?

我尝试了 true 和 false 的组合作为第三个参数,唯一的区别似乎是 resource 是否附加为子级。 xml 文件中提到的resource 的布局参数在两种情况下都有效。

【问题讨论】:

    标签: android view layoutparams


    【解决方案1】:

    public View inflate (int resource, ViewGroup root, boolean attachToRoot) 的真正含义是什么?

    它指向你要膨胀的布局资源。第二个参数是您正在扩充要附加到的资源的层次结构的根视图。当第三个参数存在时,它控制膨胀后的视图是否附加到提供的根。

    最后两个参数可能会引起一些混乱。使用此方法的两个参数版本,LayoutInflater 将自动尝试将膨胀视图附加到提供的根。但是,该框架有一个检查机制,如果您为 root 传递 null,它会绕过此尝试以避免应用程序崩溃。

    在大多数情况下,如果允许 LayoutInflater 自动将膨胀的视图附加到根,它将在稍后抛出异常。

    那么,如果我们不应该附加到它,为什么要给出这个 ViewGroup 呢?

    事实证明,父视图是膨胀过程中非常重要的一部分,因为它是评估在被膨胀的 XML 的根元素中声明的 LayoutParams 所必需的。在这里不传递任何内容类似于告诉框架“对不起,因为我不知道这个视图实际上将附加到哪个父级”。

    reference

    【讨论】:

    • “为了评估在被膨胀的 XML 的根元素中声明的 LayoutParams”需要什么评估?
    • 我认为不需要对此进行评估,当作为子项添加到另一个布局时,它们是合适的。
    • 那么为什么需要 parent,当我们不想附加它的时候?
    • 传递父级意味着它将使用给定的父级扩展布局,但不会将其附加到父级..
    • @q126y 兄弟,你还有什么困惑吗?
    【解决方案2】:

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

    如果设置为 false,那么您的布局将被放大,但不会附加到任何其他布局(因此不会被绘制、接收触摸事件等)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多