我有一个水平的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>
答案 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)
你说如下:“基本上,我希望他们都拥有最高的兄弟姐妹的身高”。 鉴于你不知道哪个是最高的兄弟姐妹,那么你必须以编程方式进行,基本上是这样的:
首先获取每个小部件的高度,如下所示:
int height = widget.getHeight(); //with this you know which is the tallest one
然后,创建一个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);
这就是全部,但考虑到在此解决方案中,您必须使用RelativeLayout而不是LinearLayout来执行此操作。
我认为RelativeLayout
是解决方案,因为它为您提供了灵活性,在这种情况下,它允许您根据参考(即:最高视图)将视图顶部对齐。 / p>
答案 2 :(得分:0)
在这种情况下,我认为你应该这样做:
首先,所有按钮都有背景,所以我认为你应该知道所有视图的高度。也许你可以这样做,给LinearyLayout maxHeight/minHeight
或固定值,然后在子视图中使用layout_height="match_parent"
。除非您必须在代码中实际调整Ui。