不均匀的LinearLayout重量分布

时间:2011-05-24 21:39:31

标签: android android-linearlayout

我有一个LinearLayout,它有四个水平放置的视图。第一个和最后一个组件是设定大小。对于内部两个视图,我想分享50:50的可用空间。我将每个设置为“1”的权重,但是当视图布局时,视图的大小取决于它们所拥有的内容。 Screen shot of the layout. The data is hidden but it shows how offset the views are

这是我的布局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%,但是当名称较长时,描述会向右移动。为什么呢?

2 个答案:

答案 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也可能有效,但您必须进行一些实验(我相信使用嵌套布局,就像在我的示例中一样,将完成工作)。