5

有一个带有 wrap_content 布局参数的 LinearLayout。我有几个带有 match_parent 参数的视图。让我们来看看。

情况1:

<LinearLayout
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:background="#990000"
    android:orientation="vertical">

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="150dp"
        android:background="#004400">
    </RelativeLayout>
</LinearLayout>

在此处输入图像描述

案例二:

<LinearLayout
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:background="#990000"
    android:orientation="vertical">

    <Button
        android:layout_width="match_parent"
        android:layout_height="150dp"
        android:text="What a terrible failure!"
        android:background="#009900"/>
</LinearLayout>

在此处输入图像描述

案例3:

<LinearLayout
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:background="#990000"
    android:orientation="vertical">

    <View
        android:layout_width="match_parent"
        android:layout_height="150dp"
        android:background="#000099"/>
</LinearLayout>

这是预期的行为。视图被绘制。由于声望不到 10,我无法发布第三张图片。感谢堆栈溢出!:)

所有示例都在真实设备上进行了测试,而不仅仅是在 android studio 预览版中。

从 android 开发 -> API 指南 -> 用户界面 -> 布局: wrap_content - 告诉您的视图将自身调整到其内容所需的尺寸。

考虑第二种情况。我仍然可以理解按钮有内容,父视图只接受按钮文本和填充 - 它是“内容”。

但是第一个案例呢?孩子明确说“我要和match_parent一起画”。我知道RelativeLayout没有孩子,但它不应该打扰父容器还是应该?

或者,如果Android试图通过请求“内容大小”(OnMeasure)来下层,那么为什么我们需要设置宽度。如果它如此聪明并为我决定一切?

这里到底发生了什么?我不明白。为什么会心动?

4

1 回答 1

0

它不会打扰。在第一种情况下,子项的宽度将与其父项相同,因为您将其 match_parent 设置为 wrap_content 宽度父项。并且孩子的高度将与父母一样小/大,因为您为高度指定了精确值。

于 2017-06-24T05:59:15.477 回答