两个之一 Android ListView 填充太多 space

One of two Android ListView filling too much space

我想为 Android 手机应用程序获取此布局:

Icon - Object1
List with entries related to Object1

Icon - Object2
List with entries related to Object2

到目前为止,我使用了以下布局树(使用 Android Studio 中的编辑器以图形方式编辑):

Root-LinearLayout

Vertical LinearLayout

Horizontal LinearLayout with icon and text

ListView

垂直线性布局

Horizontal LinearLayout with icon and text

ListView

可能这不是组织此类布局的最佳方式(也许我应该使用带有 header 的列表,但非常欢迎提出建议),但它可能是深入了解 ListView 工作原理的好案例.

这是生成的图形布局:

蓝行对应第一个LinearLayout。从下面的第二个屏幕截图中可以看出,第二个列表一直到地狱,把我和她一起带走。有没有办法让列表尊重 wrap_content+ weight 行为?

XML 代码如下。我已经尝试了 layout:weights 的几种组合(合理的和不合理的),但 none 有效。我还尝试设置第一个 LinearLayout(隐藏的)的 min-width,但没有任何变化。

你能帮帮我吗?

<?xml version="1.0" encoding="utf-8"?>
  <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="2">

<LinearLayout
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_weight="1">

    <LinearLayout
        android:orientation="horizontal"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:gravity="center_vertical"
        android:minHeight="50dp">

        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/imageView15"
            android:src="@drawable/abc_ic_menu_share_mtrl_alpha" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Object1"
            android:id="@+id/textView24"
            android:textSize="26dp"
            android:paddingLeft="10dp" />
    </LinearLayout>
</LinearLayout>

<ListView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/listView2"
    android:layout_weight="1" />

<LinearLayout
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_weight="1">

    <LinearLayout
        android:orientation="horizontal"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:gravity="center_vertical">

        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/imageView16"
            android:src="@drawable/abc_ic_commit_search_api_mtrl_alpha" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Object2"
            android:id="@+id/textView25"
            android:textSize="26dp"
            android:paddingLeft="10dp" />
    </LinearLayout>

    <ListView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/listView"
        android:layout_weight="1" />
</LinearLayout>

如果您将 ListView 放在 child LinearLayout 的内部,它包含 LinearLayoutTextViewImageView。在垂直布局中使用 weight 时,您还应该对 height 使用 "0dp"

我相信这样的事情应该有效

<?xml version="1.0" encoding="utf-8"?>
<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="2">

    <LinearLayout
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1">

    <LinearLayout
        android:orientation="horizontal"
        android:layout_width="fill_parent"
        android:layout_height="0dp"
        android:gravity="center_vertical"
        android:minHeight="50dp"
        android:layout_weight=".2">

        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/imageView15"
            android:src="@drawable/abc_ic_menu_share_mtrl_alpha" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Object1"
            android:id="@+id/textView24"
            android:textSize="26dp"
            android:paddingLeft="10dp" />
    </LinearLayout>

    <ListView
        android:layout_width="wrap_content"
        android:layout_height="0dp"
        android:id="@+id/listView2"
        android:layout_weight=".8" />
    </LinearLayout>

注意其他变化:我给内部 LinearLayout 一个任意的 weight 的“.2”然后 ListView 一个 weight 的“.8” .当然,将高度设置为“0dp”。您可能需要稍微玩一下那些 weights,但我认为首先对 child LinearLayouts 做类似的事情应该会让您接近。

这可能会让您当前的布局正常工作,但使用 headers and/or 和 ExpandableListView 可能是更好的选择。