我在布局片段中有以下结构。
FrameLayout (height: wrap content)
|
|--> LinearLayout (height: match parent)
| |
| |--> TextView (height: wrap content)
| |
| |--> SomeOtherView (height: wrap content)
|
|--> View (height: match parent)
此片段的总高度是TextView
和SomeOtherView
的高度。我的问题是,因为最外面的FrameLayout
具有高度作为包裹内容并且其子节点具有高度作为匹配父节点,难道它不会在计算高度时造成困境吗?在这种情况下决定高度的规则是什么?
答案 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
显然,这种逻辑适用于蜂窝状的线性布局和框架布局。