Android 中包含 ListView 的 ScrollView

ScrollView including ListView in Android

我想要一个包含 ListViewScrollView,这显然是不可取的,因为 ListView 有自己的滚动条。

基本上我想要一个RelativeLayout,其中包含形成页面header的多个视图,然后是ListView,类似于带有图像的Facebook个人资料页面然后是提要。

如果我只是将 ListView 放在 RelativeLayout 中,那么只有 ListView 区域是可滚动的,而不是整个页面。

有没有办法不将 header (RelativeLayout) 作为第一个元素包含在 ListView 中?

实际上我自己并没有这样做,但我知道实现您的目标并使您的布局看起来更性感的诀窍。 首先摆脱那个ScrollView。 然后在你的 ListView 上放置一个监视器(监听器)来检测你的 ListView 滚动了多少,并考虑一个合理的阈值来检测 *. 现在什么是 * ?现在是您应该 "Hide" 或 "slowly fade" 您的 header 项的时候了。当用户向下滚动 ListView 并达到该阈值时,会慢慢淡出或隐藏 header。然后当用户向上滚动时再次使用阈值来决定何时让您的 header 项目可见。 据我所知,就是这个想法。也尝试检查 github 和 android-arsenal 我想应该有一个库可以简化你的工作。

试试这个代码。

  <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="match_parent"
        android:layout_margin="10dp" >

        <LinearLayout
            android:id="@+id/headerLayout"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content" >

            <TextView
                android:id="@+id/textView1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="TextView" />

            <TextView
                android:id="@+id/textView2"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="TextView" />
        </LinearLayout>

        <ListView
            android:id="@+id/listView"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@+id/headerLayout" >
        </ListView>

    </RelativeLayout>

ListView 上好像有一个方法叫做addHeaderView。我可以使用它在顶部添加 RelativeLayout。感谢您的输入。

    Use this class

    public class Helper {

       public static void getListViewSize(ListView myListView) {
           ListAdapter myListAdapter = myListView.getAdapter();
           if (myListAdapter == null) {
    //           do nothing return null
               return;
           }
           //set listAdapter in loop for getting final size
           int totalHeight = 0;

           for (int size = 0; size < myListAdapter.getCount(); size++) {
               View listItem = myListAdapter.getView(size, null, myListView);
               listItem.measure(0, 0);
               totalHeight += listItem.getMeasuredHeight();
           }
         //setting listview item in adapter
           ViewGroup.LayoutParams params = myListView.getLayoutParams();
           params.height = totalHeight + (myListView.getDividerHeight() * (myListAdapter.getCount() - 1));
           myListView.setLayoutParams(params);
           // print height of adapter on log
           Log.i("height of listItem:", String.valueOf(totalHeight));
       }
    }

and in the activity class, use,

Helper.getListViewSize(ur listview name);