在内容更改时调整scrollView的大小

时间:2015-05-01 13:43:17

标签: android scrollview

我有以下布局:

<?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="wrap_content"
    android:animateLayoutChanges="true"
    android:orientation="vertical">

    <eddine.charef.mechalikh.swipedemo.NotifyingScrollView
    android:id="@+id/scroll_view"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
        android:layout_marginTop="-40dp"
        android:fillViewport="false">

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">

        <ImageView
            android:id="@+id/image_header"
            android:layout_width="match_parent"
            android:layout_height="250dp"
            android:src="@drawable/stethoscope"
            android:scaleType="centerCrop" />
        <View
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/view"
            android:background="@drawable/gradient"/>
        <View
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/view2"
            android:layout_above="@+id/linearLay"
            android:background="@drawable/gradient2"
            android:visibility="gone" />

        <LinearLayout
            android:orientation="vertical"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true"
            android:layout_alignParentEnd="true"
            android:layout_marginTop="-10dp"
            android:layout_below="@+id/image_header"
            android:id="@+id/linearLay"
            android:animateLayoutChanges="true"
            android:background="#ffffff"
            android:layout_alignTop="@+id/editPrenom">

            <Space
                android:layout_width="fill_parent"
                android:layout_height="22dp"
                android:id="@+id/space_spinner"
                android:visibility="gone" />

            <Spinner
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:id="@+id/spinner3"
                android:layout_alignParentLeft="true"
                android:layout_alignParentStart="true"
                android:layout_alignParentRight="true"
                android:layout_alignParentEnd="true"
                android:visibility="gone"
                android:gravity="center" />

        </LinearLayout>


        <ListView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/listView5"
            android:layout_alignParentBottom="true"
            android:layout_alignParentRight="true"
            android:layout_alignParentEnd="true"
            android:layout_alignParentLeft="true"
            android:layout_alignParentStart="true"
            android:layout_below="@+id/linearLay"
            android:visibility="visible" />


        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:textAppearance="?android:attr/textAppearanceLarge"
            android:text="@string/bienvenue"
            android:id="@+id/textView20"
            android:textColor="#000"
            android:layout_centerHorizontal="true"
            android:layout_below="@+id/view"
            android:visibility="visible"
            android:layout_marginTop="20dp"
            android:gravity="left"
            android:layout_marginLeft="10dp"
            android:layout_marginRight="10dp" />

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:textAppearance="?android:attr/textAppearanceLarge"
            android:id="@+id/textView21"
            android:textColor="#000"
            android:layout_below="@id/textView20"
            android:layout_centerHorizontal="true"
            android:visibility="visible"
            android:gravity="left"
            android:layout_marginLeft="10dp"
            android:layout_marginRight="10dp" />
        <ImageView
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:id="@+id/imageView5"
            android:layout_below="@+id/linearLay"
            android:src="@drawable/shadow_divider"
            android:layout_marginTop="-3dp" />

        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/imageView2"
            android:adjustViewBounds="true"
            android:src="@drawable/param"
            android:onClick="params_click"
            android:visibility="visible"
            android:layout_above="@+id/linearLay"
            android:layout_alignParentLeft="true"
            android:layout_marginLeft="15dp"
            android:layout_marginBottom="-25dp"
            android:scaleType="center" />

    </RelativeLayout>
</eddine.charef.mechalikh.swipedemo.NotifyingScrollView>
    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/image_scroll_up_2"
        android:adjustViewBounds="true"
        android:src="@drawable/scroll_up"
        android:onClick="scroll_up"
        android:visibility="invisible"
        android:layout_above="@+id/space"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true"
        android:layout_marginRight="15dp" />

    <Space
        android:layout_width="fill_parent"
        android:layout_height="15dp"
        android:layout_alignParentBottom="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:id="@+id/space" />
</RelativeLayout>

在运行时listView内的scrollView将会更新... 当用户点击“日期”时,它显示一切正常(没问题) 当他点击“关注”时,即使listview为空且滚动视图正常(没问题,也无法滚动,因为列表为空) 但是当选择“消息”时,当列表为空或只是几个项目时...滚动视图可以滚动(我的意思是很多空间看到图片)

enter image description here

enter image description here

这张图片中心的白色光盘是开发商在设置中选择的触点,它不是我布局的一部分

你可以看到列表在图像2中的结束位置(listView的背景与scrollView不同)

那么为什么不会调整scrollView的大小?

注意:我使用此函数调整listView的大小,使其显示在scrollView

           ListAdapter listAdapter = listView.getAdapter();
        if (listAdapter == null) {
        // pre-condition
              return;
        }

        int totalHeight = listView.getPaddingTop() + listView.getPaddingBottom();
        for (int i = 0; i < listAdapter.getCount(); i++) {
             View listItem = listAdapter.getView(i, null, listView);
             if (listItem instanceof ViewGroup) {
                listItem.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
             }
             listItem.measure(0, 0);
             totalHeight += listItem.getMeasuredHeight();
        }

        ViewGroup.LayoutParams params = listView.getLayoutParams();
        params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1));
                  listView.setLayoutParams(params);
    }

我把它称之为物品改变的地方。

1 个答案:

答案 0 :(得分:0)

我不明白为什么你把scollview放在listview中,你试图执行视差还是玩工具栏?

使用视差或工具栏我使用RecyclerView更简单。 您可以使用ObservableRecyclerView提供大量示例:

https://github.com/ksoichiro/Android-ObservableScrollView