0

我有一个带有多个孩子的 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>

但我得到了这个结果:

在此处输入图像描述

此外,如您所见,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>

如何解决这些问题?

4

1 回答 1

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"
    >

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

虽然如果你使用一个 RelativeLayout 而不是两个 LinearLayouts,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>
于 2012-12-31T17:54:25.190 回答