Android - 嵌套布局

时间:2014-12-22 12:14:25

标签: android xml android-layout android-xml

我构建了以下XML布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@color/white"
    android:orientation="vertical" >

    <LinearLayout
        android:id="@+id/ll1"
        android:layout_width="fill_parent"
        android:layout_height="0dp"
        android:layout_weight="0.2"
        android:orientation="horizontal" >

        <ImageView
            android:id="@+id/imageView1"
            android:layout_width="0dp"
            android:layout_height="fill_parent"
            android:layout_weight="0.3"
            android:gravity="center"
            android:src="@drawable/logo" />

        <TextView
            android:layout_width="0dp"
            android:layout_height="fill_parent"
            android:layout_weight="0.7"
            android:gravity="center"
            android:text="@string/my_profile"
            android:textColor="#A669DA"
            android:textSize="20sp" />

    </LinearLayout>

    <LinearLayout
        android:id="@+id/ll2"
        android:background="#A669DA"
        android:layout_marginTop="10dp"
        android:layout_marginBottom="10dp"
        android:layout_width="fill_parent"
        android:layout_height="0dp"
        android:layout_weight="0.15"
        android:orientation="horizontal" >

        <TextView
            android:id="@+id/TextView"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_marginLeft="10dp"
            android:layout_marginTop="20dp"
            android:text="@string/payroll_header"
            android:textColor="#FFFFFF"
            android:textSize="20sp" />

    </LinearLayout>

    <ScrollView
        android:id="@+id/scrollView1"
        android:layout_width="fill_parent"
        android:layout_height="0dp"
        android:layout_weight="0.65" >

        <LinearLayout
            android:id="@+id/ll3"
            android:layout_width="fill_parent"
            android:layout_height="0dp"
            android:orientation="vertical"
            android:weightSum="2" >

            <ExpandableListView
                android:id="@+id/expandableListView1"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:fadeScrollbars="true" >
            </ExpandableListView>

            <HorizontalScrollView
                android:id="@+id/horizontalScrollView1"
                android:layout_width="match_parent"
                android:layout_height="wrap_content" >

                <ExpandableListView
                    android:id="@+id/expandableListView2"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content" >
                </ExpandableListView>

            </HorizontalScrollView>

            <ListView
                android:id="@+id/listView1"
                android:layout_width="match_parent"
                android:layout_height="wrap_content" >
            </ListView>

        </LinearLayout>

    </ScrollView>

</LinearLayout>

此XML布局的根元素是线性布局。它包含2个线性布局和一个滚动。由于滚动视图只能有一个子项,因此它包含一个线性布局,该布局又包含一个可展开的listView,水平滚动视图(包含一个可展开的列表视图)和一个列表视图。如您所见,这是一个非常复杂的布局,我认为应该可以简化。基本上,我希望前2个线性布局总是占据屏幕的35%,而滚动视图则需要其余部分。这就是为什么我给第一个线性布局0.2的权重,第二个线性布局的权重为0.15,以及向scrollView赋予0.65的权重。

在scrollView中,我希望3个元素中的每一个都能够占用所需的空间,以便用户在他/她看不到所有内容时向下滚动。我知道expandableListView和ListView已经可以滚动了,所以我将禁用它们中的滚动,以便使用父滚动条。

但是,我遇到了这个设计的几个问题:

1)在第一个屏幕截图中,您可以看到expandableListView,horizo​​ntalScrollBar(带有expandableListView)和listView。 它们中的每一个都设置为&#34;包装内容&#34;,所以我希望它们中的每一个都能够占用所需的空间。但是,您可以在第二个屏幕截图中看到,当我打开第二个可展开的listView(水平滚动条中的那个)时,listview不会向下移动以为展开的列表视图腾出空间。我如何实现它,以便当上面的可扩展列表扩展时,每个都向下移动?唯一的方法是将它们组合在一个expandableListView中吗?

2)我的第二个expandableListView位于horizo​​ntalScrollBar中,但是,我无法水平滚动它。我甚至可以将水平滚动条放在垂直的scrollBar中吗?

enter image description here enter image description here

1 个答案:

答案 0 :(得分:1)

首先,稍微简化一下:你的第二个LinearLayout(0.15一个)可以省略,因为它只有一个孩子。只需确保调整该单个子项的布局参数(TextView)。

对于您的问题#1,请尝试在根视图上调用invalidate()或requestLayout()。

问题#2实际上已经解决了:Link

我的总体印象是ScrollViews和ListViews的这种嵌套非常复杂。您是否考虑过TabLayout或DrawerLayout等替代方案?

干杯