LinearLayout中的权重

时间:2012-12-31 17:51:07

标签: android android-linearlayout

我有一个包含多个子项的LinearLayout,我希望ListView填充父布局的剩余下半部分:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="vertical"
              android:layout_width="match_parent"
              android:layout_height="match_parent"
              android:weightSum="1"
    >

    <AutoCompleteTextView
        android:id="@+id/from_tv"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="10dp"
        android:layout_marginRight="10dp"
        android:layout_marginTop="20dp"
        android:layout_marginBottom="10dp"
        android:hint="@string/hint_from"
        android:singleLine="true"
        android:imeOptions="actionNext"
        />

    <AutoCompleteTextView
        android:id="@+id/to_tv"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="10dp"
        android:hint="@string/hint_to"
        android:singleLine="true"
        android:imeOptions="actionSearch"
        />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        >

        <Button
            android:id="@+id/inverse_btn"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight=".4"
            android:layout_margin="10dp"
            android:text="@string/inverse"
            android:onClick="onClick"
            />

        <Button
            android:id="@+id/search_btn"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight=".6"
            android:layout_margin="10dp"
            android:text="@string/search"
            android:onClick="onClick"
            />


    </LinearLayout>


    <View
        android:layout_width="match_parent"
        android:layout_height="1dp"
        android:layout_marginTop="20dp"
        android:layout_marginBottom="10dp"
        android:background="@color/holo_blue_dark"
        />

    <ListView
        android:id="@+id/favorites_lv"
        android:layout_width="match_parent"
        android:layout_height="0dip"
        android:layout_weight=".5"
        android:layout_marginLeft="10dp"
        android:layout_marginRight="10dp"
        android:layout_marginTop="10dp"
        android:layout_gravity="bottom"
        android:background="#700"
        />

</LinearLayout>

但我得到了这个结果:

enter image description here

另外,正如您所看到的,ListView项目高度存在问题。项目布局:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="horizontal"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:padding="5dp">

    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@android:drawable/ic_menu_mylocation"
        android:contentDescription="@string/favorites_icon_cd"
        />


    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_marginLeft="20dp"
        android:orientation="vertical"
        android:gravity="left|center_vertical"
        >

        <TextView
            android:id="@+id/from_tv"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:ellipsize="end"
            />

        <TextView
            android:id="@+id/to_tv"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:ellipsize="end"
            />

    </LinearLayout>

</LinearLayout>

如何解决这些问题?

1 个答案:

答案 0 :(得分:3)

  

我有一个包含多个子项的LinearLayout,我希望ListView填充父布局的剩余下半部分:

您可以尝试将ListView的高度更改为match_parent,而不是使用layout_weight

<ListView
    android:id="@+id/favorites_lv"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    ... />
  

另外,正如您所看到的,ListView项目高度存在问题。

要使用您的布局,只需将嵌套的LinearLayout的高度更改为wrap_content

<LinearLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginLeft="20dp"
    android:orientation="vertical"
    android:gravity="left|center_vertical"
    >

(如果您希望图像居中,可以在ImageView中添加:android:layout_gravity="center_vertical"。)

虽然如果使用一个RelativeLayout而不是两个LinearLayout,Android绘制速度会更快。试试这个:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" 
    android:padding="5dp"
    >

    <ImageView
        android:id="@+id/image"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerVertical="true"
        android:layout_marginRight="20dp"
        android:src="@android:drawable/ic_menu_mylocation"
        android:contentDescription="@string/favorites_icon_cd"
        />

    <TextView
        android:id="@+id/from_tv"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_toRightOf="@id/image"
        android:ellipsize="end"
        />

    <TextView
        android:id="@+id/to_tv"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_below="@id/from_tv"
        android:layout_toRightOf="@id/image"
        android:ellipsize="end"
        />

</RelativeLayout>