7

我有一个水平线性布局,里面有三个视图。每个都将其 layout_width 设置为 0dp,并设置不同的权重。它们都为 layout_height 设置了 wrap_content。

我遇到的问题是,当其中一个包裹时,其他的不再填满 LinearLayout 的整个高度(它们有背景,所以看起来很难看)。

我想让它们全部填充 LinearLayout 中的任何剩余垂直空间,同时还允许它们在需要时包装内容。基本上,我希望他们都拥有最高兄弟姐妹的身高。

我尝试将 layout_gravity 设置为“fill”和“fill_vertical”,但这没有任何作用。

下面是一个布局示例:

<LinearLayout
            android:id="@+id/LinearLayout1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@android:color/background_dark"
            android:orientation="horizontal" >

            <Button
                android:id="@+id/job"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_gravity="fill"
                android:layout_margin="1dp"
                android:layout_weight="4"
                android:background="@drawable/btn_bkgnd_dark_grey"
                android:drawableLeft="@drawable/icon_plus"
                android:onClick="jobPressed"
                android:padding="5dp"
                android:text="Add to Job fgh dfhfg "
                android:textAppearance="@style/rowitem_notes"
                android:textColor="@android:color/white" />

            <ImageButton
                android:id="@+id/bookmark"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_gravity="fill"
                android:layout_margin="1dp"
                android:layout_weight="2"
                android:background="@drawable/btn_bkgnd_dark_grey"
                android:onClick="bookmarkPressed"
                android:padding="5dp"
                android:src="@drawable/icon_bookmark" />

            <Button
                android:id="@+id/itemDetailsButton"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_gravity="fill"
                android:layout_margin="1dp"
                android:layout_weight="4"
                android:background="@drawable/btn_bkgnd_dark_grey"
                android:drawableRight="@drawable/icon_info"
                android:onClick="itemDetailsPressed"
                android:padding="5dp"
                android:text="Item Details"
                android:textAppearance="@style/rowitem_notes"
                android:textColor="@android:color/white" />

        </LinearLayout>
4

3 回答 3

18

我已经更正了你的布局。使用 fill_parent 而不是包装子视图的内容。我使用了默认的 android drawables 和颜色,用你的 drawables 和样式替换它。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/LinearLayout1"
style="@android:style/ButtonBar"
android:layout_width="fill_parent"
android:gravity="center"
android:layout_height="wrap_content"
android:orientation="horizontal" >

<Button
    android:id="@+id/job"
    android:layout_width="0dip"
    android:layout_height="fill_parent"
    android:layout_gravity="center"
    android:layout_margin="2dp"
    android:layout_weight="4"
    android:background="#33B5E5"
    android:drawableLeft="@android:drawable/btn_star"
    android:onClick="jobPressed"
    android:padding="5dp"
    android:text="Add to Job fgh"
    android:textColor="@android:color/white"
    android:textSize="10sp" />

<ImageButton
    android:id="@+id/bookmark"
    android:layout_width="0dip"
    android:layout_height="fill_parent"
    android:layout_gravity="center"
    android:layout_margin="2dp"
    android:layout_weight="1"
    android:background="#33B5E5"
    android:onClick="bookmarkPressed"
    android:padding="5dp"
    android:scaleType="fitCenter"
    android:src="@android:drawable/ic_input_add" />

<Button
    android:id="@+id/itemDetailsButton"
    android:layout_width="0dip"
    android:layout_height="fill_parent"
    android:layout_gravity="center"
    android:layout_margin="2dp"
    android:layout_weight="4"
    android:background="#33B5E5"
    android:drawableRight="@android:drawable/ic_delete"
    android:onClick="itemDetailsPressed"
    android:padding="5dp"
    android:text="Item Details"
    android:textColor="@android:color/white"
    android:textSize="10sp" />

</LinearLayout>
于 2013-05-09T06:15:42.557 回答
1

您说以下内容:“基本上,我希望他们都拥有最高兄弟姐妹的身高”。鉴于您不知道哪个将是具有最高高度的兄弟姐妹,那么您必须以编程方式进行,基本上是这样的:

  1. 首先获取每个小部件的高度,如下所示:

    int height = widget.getHeight();  //with this you know which is the tallest one
    
  2. 然后,创建一个 RelativeLayout 参数,以便将 layout_alignTop 属性设置为必须相应缩放到最高视图的视图。显然 align_Top 指的是最高视图的 id

    RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);
    layout.setLayoutParams(params);         
    params.addRule(RelativeLayout.ALIGN_TOP,R.id.tallest_widget);
    widget.setLayoutParams(params);
    
  3. 仅此而已,但请注意,在此解决方案中,您必须使用RelativeLayout 而不是LinearLayout 来执行此操作。

我认为RelativeLayout这是解决方案,因为它为您提供了灵活性,在这种情况下,它允许您将视图的顶部相应地与参考对齐(即:最高的视图)。

于 2013-05-09T02:30:33.923 回答
0

在这种情况下,我认为您应该这样做:首先,所有按钮都有背景,所以我认为您应该知道所有视图的高度。也许你可以这样做,给 LinearyLayoutmaxHeight/minHeight或固定值,然后layout_height="match_parent"在子视图中使用。除非您必须在代码中务实地调整 Ui。

于 2013-05-09T02:13:36.093 回答