Android:外部布局包装内容和内部布局匹配父级

时间:2015-04-11 02:44:44

标签: android

我在布局片段中有以下结构。

FrameLayout (height: wrap content)
    |
    |--> LinearLayout (height: match parent)
    |      |
    |      |--> TextView (height: wrap content)
    |      |
    |      |--> SomeOtherView (height: wrap content)
    |
    |--> View (height: match parent)

此片段的总高度是TextViewSomeOtherView的高度。我的问题是,因为最外面的FrameLayout具有高度作为包裹内容并且其子节点具有高度作为匹配父节点,难道它不会在计算高度时造成困境吗?在这种情况下决定高度的规则是什么?

2 个答案:

答案 0 :(得分:1)

这是一个有趣的问题,让你思考你通常认为理所当然的事情:)

根据我的经验,整体布局将遵循FrameLayout的身高规格,即"足够大以包围其子女+填充"。

关于你的第二个问题,这里是官方文件says

  

绘制布局是一个两遍过程:度量过程和布局过程。测量过程在measure(int, int)中实现,是View树的自上而下遍历。在递归期间,每个视图都会在树中向下推送维度规范。在测量过程结束时,每个View都存储了其测量值。第二次传递发生在layout(int, int, int, int),也是自上而下。在此过程中,每个父级负责使用度量传递中计算的大小来定位其所有子项。

还有:

  

度量过程使用两个类来传达维度。 View对象使用ViewGroup.LayoutParams类告诉他们的父母他们想要如何测量和定位。

作为一种简化,我认为可以安全地说儿童的身高被其父母视为某种建议,而不是订单,父母的维度需要优先级。

答案 1 :(得分:1)

combining wrap_content on parent and fill_parent on child

显然,这种逻辑适用于蜂窝状的线性布局和框架布局。