0

在我的布局中,我为内部包含 4 个列表视图的线性布局之一设置了 centerVertical。它工作正常。最初每个列表视图作为一个项目。单击任何列表视图中的项目时,我在该列表视图中附加了一个新的数组列表(它就像 1 级菜单和 2 级菜单)。代码工作正常,但是当我使用 2 级数组列表更新任何列表视图时,所有列表视图的 center_Vertical 属性都会丢失,它们会出现在屏幕顶部。

这是我的布局文件:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">


  <LinearLayout
        android:id="@+id/container"
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_centerVertical="true"
        android:splitMotionEvents="true">

    <ListView
        android:id="@+id/list_left"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:scrollbars="none"
        android:divider="@null"
        android:dividerHeight="0dp"
        android:layout_weight="1"/>

    <ListView
        android:id="@+id/list_center1"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:scrollbars="none"
        android:divider="@null"
        android:dividerHeight="0dp"
        android:layout_weight="1"/>

    <ListView
        android:id="@+id/list_center2"
        android:layout_width="match_parent"
        android:layout_height="match_parent" 
        android:scrollbars="none"
        android:divider="@null"
        android:dividerHeight="0dp"
        android:layout_weight="1"/>

    <ListView
        android:id="@+id/list_right"
        android:layout_width="match_parent"
        android:layout_height="match_parent"  
        android:scrollbars="none"
        android:divider="@null"
        android:dividerHeight="0dp"
        android:layout_weight="1"/>
  </LinearLayout>

    <Button
        android:id="@+id/button1"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" 
        android:visibility="gone"
        android:text="Clear Cache"/>
</RelativeLayout>

如果有人可以帮助我,我会非常感谢。

4

2 回答 2

1

用户j__m's建议部分正确:

Have you tried changing the heights of the ListViews to wrap_content?

用户alex's评论也是正确的:

wrap_content shouldn't be used on ListView.

让我们将建议搁置几分钟,然后实现您的目标:

在我的布局中,我为内部包含 4 个列表视图的线性布局之一设置了 centerVertical。它工作正常。

绝对地。假设 Linearlayout 的初始高度是 A 个单位(高度是 wrap_content)。而RelativeLayout 的高度是Y 个单位(match_parent => 填满屏幕)。因此,以下内容:

android:layout_centerVertical="true"

在 y = Y/2 行上方对齐 A/2 个单位的 LinearLayout,在 y = Y/2 下方对齐 A/2 个单位。

由于所有 ListView 的高度都设置为 match_parent,因此它们的高度也等于 A 单位。这适用于每个列表中的一项。

现在,考虑 ListView 的高度之一增长到 > Y 个单位的情况。在这种情况下,LinearLayout 的高度也会增长到 Y 个单位。和:

android:layout_centerVertical="true"

在 y = Y/2 线上方对齐 Y/2 单位的 LinearLayout,在 y = Y/2 下方对齐 Y/2 单位。

甚至具有一项的 ListViews 也是从顶部开始的。因为,它们的高度也是 Y 单位。

希望这是有道理的。

解决方案:

将每个 ListView 的高度设置为 wrap_content。设置 LinearLayout 的android:gravity="center_vertical". 现在,LinearLayout 有自己的 y= Y/2 轴。高度等于 Y 的 ListViews 将从顶部开始。高度为 A 的 ListView 将保持在 y = Y/2 左右。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">


  <LinearLayout
        android:id="@+id/container"
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_centerVertical="true"
        android:gravity="center_vertical"
        android:splitMotionEvents="true">

    <ListView
        android:id="@+id/list_left"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:scrollbars="none"
        android:divider="@null"
        android:dividerHeight="0dp"
        android:layout_weight="1"/>

    <ListView
        android:id="@+id/list_center1"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:scrollbars="none"
        android:divider="@null"
        android:dividerHeight="0dp"
        android:layout_weight="1"/>

    <ListView
        android:id="@+id/list_center2"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:scrollbars="none"
        android:divider="@null"
        android:dividerHeight="0dp"
        android:layout_weight="1"/>

    <ListView
        android:id="@+id/list_right"
        android:layout_width="0dp"
        android:layout_height="wrap_content"  
        android:scrollbars="none"
        android:divider="@null"
        android:dividerHeight="0dp"
        android:layout_weight="1"/>
  </LinearLayout>

    <Button
        android:id="@+id/button1"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" 
        android:visibility="gone"
        android:text="Clear Cache"/>
</RelativeLayout>

另一件事:

相对布局没有方向。

于 2013-09-03T04:07:52.153 回答
0
// you don't need to relative layout try this.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >

<LinearLayout
    android:id="@+id/container"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="1"
    android:orientation="horizontal"
    android:gravity="center_vertical"
    android:splitMotionEvents="true" >

    <ListView
        android:id="@+id/list_left"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:divider="@null"
        android:dividerHeight="0dp"
        android:scrollbars="none" />

    <ListView
        android:id="@+id/list_center1"
          android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:divider="@null"
        android:dividerHeight="0dp"
        android:scrollbars="none" />

    <ListView
        android:id="@+id/list_center2"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:divider="@null"
        android:dividerHeight="0dp"
        android:scrollbars="none" />

    <ListView
        android:id="@+id/list_right"
         android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:divider="@null"
        android:dividerHeight="0dp"
        android:scrollbars="none" />
</LinearLayout>

<Button
    android:id="@+id/button1"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="Clear Cache"
    android:visibility="gone" />

</LinearLayout>
于 2013-09-03T03:43:42.413 回答