在我的布局中,我为我的一个线性布局设置了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>
如果有人可以帮助我,我会高度赞赏。
答案 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>