当它们都是wrap_content时,在LinearLayout中使视图具有相同的高度

时间:2013-05-09 02:02:35

标签: android android-layout android-linearlayout

我有一个水平的LinearLayout,里面有三个视图。每个都将其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>

3 个答案:

答案 0 :(得分:14)

我已经纠正了你的布局。使用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>

答案 1 :(得分: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来执行此操作。

  4. 我认为RelativeLayout是解决方案,因为它为您提供了灵活性,在这种情况下,它允许您根据参考(即:最高视图)将视图顶部对齐。 / p>

答案 2 :(得分:0)

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