0

我有一个RelativeLayout,低于我有一个ListView。我必须把这些放在一个ScrollView. 任何帮助将不胜感激。

4

4 回答 4

2

您不应该将 ListView 放在 ScrollView 中,因为 ListView 类实现了自己的滚动,并且它只是不接收手势,因为它们都由父 ScrollView 处理

于 2012-11-23T09:31:54.383 回答
0

ScrollView只能为单个设置Layout。因此,将widgets您要滚动的内容放在一个layout中,如下所示:

<ScrollView
    android:id="@+id/scrView"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
     >

    <RelativeLayout
        android:id="@+id/rltvLyt"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" >

        <ListView
            android:id="@+id/lstView"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:textSize="20sp" />
    </RelativeLayout>
</ScrollView>
于 2012-11-23T09:32:46.240 回答
0

不要这样做。你到底想达到什么目的?在这里(以及其他任何地方)都提到过,这不是一个好主意,因为滚动机制会因为它们都想要滚动而变得混乱。然而,忽略你有一个巨大的列表视图,那么你错过了使用列表视图的主要性能提升,并且可能会膨胀使用表格布局并添加行。

于 2012-11-23T09:33:25.047 回答
0

您不应该将 ListView 放在 ScrollView 中,因为 ListView 类实现了自己的滚动,并且它只是不接收手势,因为它们都由父 ScrollView 处理。我强烈建议您以某种方式简化布局。例如,您可以将希望滚动到 ListView 的视图添加为页眉或页脚。

private void setListViewScrollable(final ListView list) {
        list.setOnTouchListener(new OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                listViewTouchAction = event.getAction();
                if (listViewTouchAction == MotionEvent.ACTION_MOVE)
                {
                    list.scrollBy(0, 1);
                }
                return false;
            }
        });
        list.setOnScrollListener(new OnScrollListener() {
            @Override
            public void onScrollStateChanged(AbsListView view,
                    int scrollState) {
            }

            @Override
            public void onScroll(AbsListView view, int firstVisibleItem,
                    int visibleItemCount, int totalItemCount) {
                if (listViewTouchAction == MotionEvent.ACTION_MOVE)
                {
                    list.scrollBy(0, -1);
                }
            }
        });
    }

listViewTouchAction 是一个全局整数值。如果可以换行

 list.scrollBy(0, 1);
于 2012-11-23T09:34:48.097 回答