如何在展开/折叠组时更改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将在内部滚动 我想滚动整个屏幕。不仅滚动视图,还有标题。
答案 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
。如果你没有使用不透明的背景,那么TextView
和LinearLayout
一样,你可以单独放置ProgressBar
。您使用的ProgressBar
越少,布局就越好!