我怎样才能获得所有可用的宽度?

How can I get all available width?

我有水平方向的线性布局。
布局的左侧是垂直方向的线性布局。
布局右侧是固定宽度80dp * 80dp的小视图。
问题:
如果我将左侧布局设置为宽度 "match_parent",则右侧布局不可见。
如果我使用 "width=0dp" 和 "weight=1" 设置正确的布局以获得尽可能多的 space ,它只会环绕内容。我的意思是它不会一直走到右边的下一个元素。

如何确保左侧元素扩展全部到父宽度减去右侧元素占用的80dp?

我相信 "match_parent" 选项会推出该布局中的任何其他内容。在左侧布局上尝试 "fill_parent",这样可以为其他内容留出空间。

一般方法是将右侧元素的宽度硬编码为 80dp,并在左侧设置以下内容:

android:layout_width="0dp"
android:layout_weight="1"

这允许右侧元素自行测量并保留其 80dp,然后父级将所有额外的 space 授予左侧元素,因为它的权重为 1。

编辑:

进一步解释为什么 match_parent 将您的右手元素推到屏幕外——当 LinearLayout 有一个带有 layout_weight 的子元素时,它会执行两次布局。第一遍将根据指定的widths/heights分配最小数量的space。正是在此过程中,您的 match_parent 元素将像您所看到的那样运行并填充它的父容器,从而将正确的元素推离屏幕。然后,在第二次布局过程中,父 LinearLayout 将根据 layout_weight 属性分配任何剩余的 space。还剩下 none 需要分配,所以没有任何变化。

但是,如果您在左侧元素上使用 layout_width="0dp",则在第一遍期间它将不会获得 space,而您的右侧元素将获得它所对应的 80dp要求。在第二遍期间,LinearLayout 父级将根据权重分配剩余的宽度——因此在这种情况下,左侧元素将接收所有未使用的 space.

试一试(背景颜色仅用于可视化正在发生的事情):

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal">

    <LinearLayout
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:orientation="vertical"
        android:background="#00ff00">

    </LinearLayout>

    <View
        android:layout_width="80dp"
        android:layout_height="80dp"
        android:background="#ff0000"/>

</LinearLayout>