ViewGroup match_parent 里面 wrap_content
Posted
技术标签:
【中文标题】ViewGroup match_parent 里面 wrap_content【英文标题】:ViewGroup match_parent inside wrap_content 【发布时间】:2017-11-27 17:31:46 【问题描述】:有一个带有 wrap_content 布局参数的 LinearLayout。我在其中有几个带有 match_parent 参数的视图。一起来看看吧。
案例一:
<LinearLayout
android:layout_
android:layout_
android:background="#990000"
android:orientation="vertical">
<RelativeLayout
android:layout_
android:layout_
android:background="#004400">
</RelativeLayout>
</LinearLayout>
案例 2:
<LinearLayout
android:layout_
android:layout_
android:background="#990000"
android:orientation="vertical">
<Button
android:layout_
android:layout_
android:text="What a terrible failure!"
android:background="#009900"/>
</LinearLayout>
案例 3:
<LinearLayout
android:layout_
android:layout_
android:background="#990000"
android:orientation="vertical">
<View
android:layout_
android:layout_
android:background="#000099"/>
</LinearLayout>
这是预期的行为。视图已绘制。 由于声望不到 10,我无法发布第三张图片。感谢堆栈溢出! :)
所有示例均在真实设备上进行测试,而不仅仅是在 android studio 预览版中。
来自 android Develop -> API Guides -> 用户界面 -> 布局: wrap_content - 告诉您的视图将自身调整到其内容所需的尺寸。
考虑第二种情况。我仍然可以理解按钮有内容,而父视图只接受按钮文本和填充 - 它是“内容”。
但是第一种情况呢?孩子明确地说“我想用match_parent绘制”。 我知道RelativeLayout没有孩子,但它不应该打扰父容器还是应该?
或者,如果Android试图通过请求“内容大小”(OnMeasure)来降低水平,那么为什么我们需要设置宽度。如果它那么聪明,为我决定一切?
这里到底发生了什么?我不明白。为什么会心动?
【问题讨论】:
【参考方案1】:它不会打扰。在第一种情况下,子项的宽度将与其父项相同,因为您将其 match_parent 设置为 wrap_content 宽度父项。并且孩子的高度将与父母一样小/大,因为您为高度指定了精确值。
【讨论】:
关于宽度:在情况 3 相同条件下为其他情况添加高度,而不是第一次。 所有案例都与案例 3 相同。如您所说。 我的意思是在案例 2,3 中为清楚起见插入了高度。这不重要。关于宽度,您没有回答任何新问题。我自己看到了这些参数。我知道这是什么意思。我很困惑,因为我无法理解这些示例的总体逻辑。它们相互矛盾。 我可以接受RelativeLaout的内容为空的说法。但是 Button 和 View 有区别(为什么?覆盖 onMeasure 效果?)。我知道 Button IS-A TextView IS-A View。案例3有屏幕link以上是关于ViewGroup match_parent 里面 wrap_content的主要内容,如果未能解决你的问题,请参考以下文章
[Android]PopupWindow 点击外部区域无法关闭的问题