如何设置ListView高度取决于ScrollView中的项目

hum*_*zed 6 android listview android-layout android-scrollview

我正在尝试添加listView内部scrollView和.

问题是我无法以ListView编程方式设置高度并正确地重绘ScrollView,因为在更改高度之前,它下面的项目仍处于旧位置.

XML

<ScrollView
    android:id="@+id/movie_detail_scroll_view"
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content">

    <RelativeLayout
        android:id="@+id/movie_detail"
        style="?android:attr/textAppearanceLarge"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:clipChildren="false">
        ...........
        <ListView
            android:id="@+id/trails_list_view"
            android:layout_width="match_parent"
            android:layout_height="200dp"
            android:layout_alignParentLeft="true"
            android:layout_alignParentStart="true"
            android:layout_below="@+id/movie_videos_container"
            android:choiceMode="none"/>
        <include
            android:id="@+id/movie_reviews_container"
            layout="@layout/partial_movie_reviews"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_below="@+id/trails_list_view"/>
        ............
    </RelativeLayout>
</ScrollView>
Run Code Online (Sandbox Code Playgroud)

我用来调整listView大小的方法:

/**
 * Sets ListView height dynamically based on the height of the items.
 *
 * @param listView to be resized
 * @return true if the listView is successfully resized, false otherwise
 */
public static boolean setListViewHeightBasedOnItems(ListView listView, ViewGroup container) {

    ListAdapter listAdapter = listView.getAdapter();
    if (listAdapter != null) {

        int numberOfItems = listAdapter.getCount();

        // Get total height of all items.
        int totalItemsHeight = 0;
        for (int itemPos = 0; itemPos < numberOfItems; itemPos++) {
            View item = listAdapter.getView(itemPos, null, listView);
            item.measure(0, 0);
            totalItemsHeight += item.getMeasuredHeight();
        }

        // Get total height of all item dividers.
        int totalDividersHeight = listView.getDividerHeight() * (numberOfItems - 1);

        // Set list height.
        ViewGroup.LayoutParams params = listView.getLayoutParams();
        params.height = totalItemsHeight + totalDividersHeight;
        listView.setLayoutParams(params);
        listView.requestLayout();

        //redraw the container layout.
        container.requestLayout();

        return true;

    } else {
        return false;
    }

}
Run Code Online (Sandbox Code Playgroud)

结果: 在此输入图像描述

即使我重绘它,我也无法摆脱这个自由空间 ScrollView

我该怎么办?

Pan*_*kaj 0

使你的滚动视图如下所示:

<ScrollView
 android:id="@+id/movie_detail_scroll_view"
 xmlns:android="http://schemas.android.com/apk/res/android"
 xmlns:tools="http://schemas.android.com/tools"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:fillViewport="true">
Run Code Online (Sandbox Code Playgroud)