两个之一 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
的内部,它包含 LinearLayout
,TextView
和 ImageView
。在垂直布局中使用 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”。您可能需要稍微玩一下那些 weight
s,但我认为首先对 child LinearLayout
s 做类似的事情应该会让您接近。
这可能会让您当前的布局正常工作,但使用 headers and/or 和 ExpandableListView
可能是更好的选择。
我想为 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
的内部,它包含 LinearLayout
,TextView
和 ImageView
。在垂直布局中使用 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”。您可能需要稍微玩一下那些 weight
s,但我认为首先对 child LinearLayout
s 做类似的事情应该会让您接近。
这可能会让您当前的布局正常工作,但使用 headers and/or 和 ExpandableListView
可能是更好的选择。