更新视图后,centerVertical属性丢失

时间:2013-09-03 02:32:57

标签: android android-layout

在我的布局中,我为我的一个线性布局设置了centerVertical,其内部包含4个列表视图。它工作正常。最初每个listview作为一个项目。点击任何列表视图中的项目,我在该列表视图中附加一个新的arraylist(它类似于1级菜单和2级菜单)。代码工作正常,但是当我使用2级arraylist更新任何listview时,所有listview的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>

如果有人可以帮助我,我会高度赞赏。

2 个答案:

答案 0 :(得分: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.

让我们暂时搁置这些建议并实现您的目标:

  

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

绝对。说Linearlayout的初始高度是A单位(高度是wrap_content)。而RelativeLayout的高度是Y单位(match_parent =&gt;填充屏幕)。所以,以下内容:

android:layout_centerVertical="true"

在线y = Y / 2上方对齐线性阵列的A / 2单位,在y = Y / 2下对齐A / 2单位。

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

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

android:layout_centerVertical="true"

将Y / 2单位的LinearLayout对齐线y = Y / 2,Y / 2单位低于y = Y / 2.

甚至包含一个项目的ListView也从顶部开始。因为,它们的高度也是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>

另一件事:

RelativeLayouts没有方向。

答案 1 :(得分: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>