我有一个LinearLayout,它有四个水平放置的视图。第一个和最后一个组件是设定大小。对于内部两个视图,我想分享50:50的可用空间。我将每个设置为“1”的权重,但是当视图布局时,视图的大小取决于它们所拥有的内容。
这是我的布局xml供参考。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/status"
android:src="@drawable/white"
android:paddingRight="10dip"
android:layout_height="35dip"
android:layout_width="35dip">
</ImageView>
<TextView android:id="@+id/name"
android:text="Name"
android:layout_height="fill_parent"
android:layout_toRightOf="@id/status"
android:layout_width="wrap_content"
android:layout_weight="1"
android:textSize="25dip">
</TextView>
<TextView android:id="@+id/description"
android:text="Description"
android:layout_toRightOf="@id/name"
android:layout_height="fill_parent"
android:layout_width="wrap_content"
android:layout_weight="1"
android:textSize="25dip">
</TextView>
<TextView android:id="@+id/time"
android:text="Time"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_toRightOf="@id/description"
android:textSize="25dip">
</TextView>
</LinearLayout>
显然这些不是实际的列名,但我出于隐私目的更改了它们。 ListView使用此布局,将每个视图的文本更改为其显示的任何值。名称和说明字段应该排成一行,因为它们都是剩余屏幕的50%,但是当名称较长时,描述会向右移动。为什么呢?
答案 0 :(得分:10)
对于要考虑的权重,布局维度需要为0(零)
<TextView android:id="@+id/name"
android:text="Name"
android:layout_height="fill_parent"
android:layout_width="0dip"
android:layout_weight="1"
android:textSize="25dip">
</TextView>
我还建议你的体重加起来为1(和使用分数)或100。
因此,对于每个视图,您将使用50或.5而不是1。 LinearLayout代码适用于任何权重和,但如果您想稍后使用其他部分修改视图,则会很困难。
此外,如果您不使用相对布局,请删除toRightOf属性。少即是多。
答案 1 :(得分:1)
尝试在android:layout_width="fill_parent"
的所有子项中使用LinearLayout
而不是“wrap_content”。或者更好的是,在xml中创建这样的结构:
<RelativeLayout>
<ImageView /> # status, fixed width, alignParentLeft="true"
<TextView /> # time, fixed width, alignParentRight="true"
<LinearLayout> # layout_width="fill_parent", toLeftOf="time" toRightOf="status"
<TextView /> # name, use layout_weight="1"
<TextView /> # description, use layout_weight="1"
</LinearLayout>
</RelativeLayout>
这应该做你想要的。使用LinearLayout
代替RelativeLayout
也可能有效,但您必须进行一些实验(我相信使用嵌套布局,就像在我的示例中一样,将完成工作)。