我怎样才能获得所有可用的宽度?
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>
我有水平方向的线性布局。
布局的左侧是垂直方向的线性布局。
布局右侧是固定宽度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>