LinearLayout权重分布不均匀

问题描述

| 我有一个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(零)
<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属性。少即是多。     ,尝试在所有ѭ3children的子级中使用
android:layout_width=\"fill_parent\"
而不是\“ wrap_content \”。或者更好的是,在您的xml中建立这样的结构:
<RelativeLayout>
    <ImageView />       # status,fixed width,alignParentLeft=\"true\"
    <TextView />        # time,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
也可以,但您必须进行一些试验(我相信像我的示例一样,使用嵌套Layout即可完成工作)。