扩展组时如何更改ExpandableListView的高度

时间:2014-08-08 14:08:21

标签: android android-layout

如何在展开/折叠组时更改ExpandableListView的高度?

我想更改ExpandableListView的高度以适应其内容的高度,以便视图不会在其内部滚动。

这是主要活动的布局。

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/container"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    tools:context="jp.foo.android.activity.FooActivity"
    tools:ignore="MergeRootFrame" />

这是主要活动片段的布局。

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    tools:context="jp.foo.android.fragment.FooFragment"
    android:background="@color/category_bg">

    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="60dp"
        android:layout_centerHorizontal="true"
        android:id="@+id/frameLayout">

        <TextView
            android:text="@string/subtitle_question_category"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:id="@+id/subtitle_category"
            android:gravity="center_vertical|center_horizontal"
            android:layout_gravity="center_horizontal|top"
            android:textSize="20sp" />
    </FrameLayout>

    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/frameLayout"
        android:background="@drawable/category_list_bg_shape"
        android:layout_marginTop="0dp"
        android:layout_marginLeft="10dp"
        android:layout_marginRight="10dp"
        android:layout_marginBottom="10dp"
        android:minHeight="300dp">

    <LinearLayout
        android:id="@+id/category_list_progressbar"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_gravity="center"
        android:gravity="center_horizontal|center_vertical"
        android:orientation="vertical"
        android:visibility="gone">
        <ProgressBar
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"/>
    </LinearLayout>

    <ExpandableListView
        android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/category_list"
            android:transcriptMode="normal">

        </ExpandableListView>
        </FrameLayout>

</RelativeLayout>

以下是实际布局 当内容太多时,ExpandableListView将在内部滚动 我想滚动整个屏幕。不仅滚动视图,还有标题。 layout sample

1 个答案:

答案 0 :(得分:2)

我解决了类似的问题,将所有内容都放入了标题中。我接近用传统方式解决它(即嵌套布局,权重......)但我觉得解决方案非常脏,需要重写方法,如onGroupClick等...来禁用ExpandableListView的滚动,标题的东西很干净,对我来说完美无缺。

因此,如果你想尝试这种方法,只需在你的片段中单独放置一个ExpandableListView,然后准备其余部分作为标题插入。

因此,在您的片段中填充ExpandableListView

 <ExpandableListView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/category_list"
    android:transcriptMode="normal">
 </ExpandableListView>

然后创建布局 expandable_header.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    tools:context="jp.foo.android.fragment.FooFragment"
    android:background="@color/category_bg">

    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="60dp"
        android:layout_centerHorizontal="true"
        android:id="@+id/frameLayout">

        <TextView
            android:text="@string/subtitle_question_category"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:id="@+id/subtitle_category"
            android:gravity="center_vertical|center_horizontal"
            android:layout_gravity="center_horizontal|top"
            android:textSize="20sp" />
    </FrameLayout>

    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/frameLayout"
        android:background="@drawable/category_list_bg_shape"
        android:layout_marginTop="0dp"
        android:layout_marginLeft="10dp"
        android:layout_marginRight="10dp"
        android:layout_marginBottom="10dp"
        android:minHeight="300dp">

    <LinearLayout
        android:id="@+id/category_list_progressbar"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_gravity="center"
        android:gravity="center_horizontal|center_vertical"
        android:orientation="vertical"
        android:visibility="gone">
        <ProgressBar
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"/>
    </LinearLayout>

</RelativeLayout>

然后将标题扩展到ExpandableListView:

.
.
.
View view = View.inflate(context, R.layout.expandable_header, null);
expandableList.addHeaderView(view, null, false);
.
.
.

这样,标题会与ExpandableListView一起滚动,因为它在里面。

顺便说一下,您的布局有多余的元素,例如只包含FrameLayout的{​​{1}}。您只能使用TextView。如果你没有使用不透明的背景,那么TextViewLinearLayout一样,你可以单独放置ProgressBar。您使用的ProgressBar越少,布局就越好!