【问题标题】:One of two Android ListView filling too much space两个 Android ListView 之一填充太多空间
【发布时间】:2015-02-20 03:18:27
【问题描述】:

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

Icon - Object1
List with entries related to Object1

Icon - Object2
List with entries related to Object2

到目前为止,我使用了以下布局树(在 Android Studio 中使用编辑器进行了图形化编辑):

根线性布局

垂直线性布局

带有图标和文本的水平线性布局

列表视图

垂直线性布局

带有图标和文本的水平线性布局

列表视图

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

这是生成的图形布局:

蓝色行对应于第一个 LinearLayout。正如你从下面的第二个屏幕截图中看到的那样,第二个列表一直下到地狱,让我和她在一起。有没有办法让列表尊重wrap_content+ weight 的行为?

XML 代码如下。我尝试了几种布局组合(合理的和不合理的):权重,但没有一个有效。我还尝试设置第一个 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>

【问题讨论】:

    标签: android android-layout android-listview


    【解决方案1】:

    如果您将ListViews 放在包含LinearLayout 的子LinearLayouts 中,它应该可以工作,该TextViewImageView。当使用带有垂直布局的weight 时,您还应该将"0dp" 用于height

    我相信这样的东西应该可以工作

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

    注意其他变化:我给了“.2”的内部LinearLayout 一个任意的weight,然后是“.8”的ListView 一个weight。当然,将高度设置为“0dp”。你可能需要和weights 玩一会儿,但我认为为第一个孩子LinearLayouts 做类似的事情应该会让你接近。

    这可能会使您当前的布局正常工作,但使用标题和/或ExpandableListView 可能是更好的选择。

    【讨论】:

    • 你是对的。我认为 ListView 在垂直线性布局内(正如我在问题中所写)。
    • 我认为可视化编辑器中存在错误。该列表显示为垂直布局内部(正如我在我的问题中所写),但它实际上在它之外,正如在 XML 中清楚地看到的那样。
    • 这是可能的,尤其是当您碰巧使用 Eclipse 时。有时您需要关闭并重新打开它,清理项目,或跳一个 jig 以使其正确运行。
    猜你喜欢
    • 1970-01-01
    • 2023-04-06
    • 1970-01-01
    • 1970-01-01
    • 2017-09-05
    • 2013-02-04
    • 1970-01-01
    • 2014-05-22
    • 1970-01-01
    相关资源
    最近更新 更多