无缝嵌套滚动(Android)

Ale*_* Fu 6 android listview

我们都被建议不要使用包含滚动机制的嵌套视图.然而,在最新的Android版本(5.0)中,电话应用程序引起了我的注意,似乎是一个ListView内部ScrollView.

真正引起我兴趣的是滚动机制从无缝切换ScrollViewListView无缝.

请注意,在实际ListView开始滚动之前,选项卡上方的内容将被推出视图.

我自己试过复制这个,但结果不成功.这是我采取的基本方法......

在此输入图像描述

通过单个连续触摸事件(不抬起手指)......

当用户滚动时,ListView慢慢地覆盖了ImageView.一旦ImageView100%覆盖并ListView占据整个屏幕,就ListView开始滚动.

目前,我正在听触摸事件ListView,如果顶部已经达到了,叫requestDisallowInterceptTouchEventListView,即

@Override
public boolean onTouch(View v, MotionEvent event) {
  if (listViewAtTop) {
    v.requestDisallowInterceptTouchEvent(true);
  } else {
    v.requestDisallowInterceptTouchEvent(false);
  }
  return false;
}
Run Code Online (Sandbox Code Playgroud)

只有当您抬起手指并继续滚动时,切换滚动上下文才有效.

是否有不同的方法可以达到预期的效果?

Mar*_*ouf 9

Android 5.0 Lollipop(API 21)添加了嵌套滚动支持.

据我所知,ListView(AbsListView)和ScrollView现在都支持此功能(如果在API 21上运行),但必须在滚动视图上启用它.

有两种方法,通过调用 setNestedScrollingEnabled(true)或使用布局属性android:nestedScrollingEnabled ="true"(未记录)

要了解它的工作原理,或者为自定义小部件支持此功能,关键方法如下:

不幸的是,没有任何指南或培训可以解释除了JavaDoc本身以外它是如何工作的,而JavaDoc本身相当轻,并且除了ScrollView之外没有其他示例.


M. *_*han 8

将最新的支持包"com.android.support:support-v4:22.1.1"添加到您的项目中.试试这个:

<android.support.v4.widget.NestedScrollView
        android:id="@+id/nScrollView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:fillViewport="true">

        <FrameLayout ...>
           <ListView ... />
        </FrameLayout >
    </android.support.v4.widget.NestedScrollView>
Run Code Online (Sandbox Code Playgroud)

默认情况下,嵌套滚动为"已启用".

  • listview没有以这种方式填补其高度的问题怎么样? (3认同)
  • @whizzzkey .. 尝试将 android:fillViewport="true" 添加到您的 ScrollView。 (2认同)

Ale*_* Fu 0

我发现了一个非常简单的替代“技巧”......仅使用ListView带有添加的透明标题的 a 。