android - 使用 NestedScrollView + TextView

标签 android scroll android-viewpager textview

我可以向您展示比我告诉您更好的东西,所以这是我的 XML 代码的结构:

<android.support.design.widget.CoordinatorLayout
    <!-- The upper part of the layout -->
    <android.support.design.widget.AppBarLayout
       <android.support.design.widget.CollapsingToolbarLayout
          <!-- some code inside -->
        </android.support.design.widget.CollapsingToolbarLayout>
      <android.support.design.widget.TabLayout/>
    </android.support.design.widget.AppBarLayout>

    <android.support.v4.view.ViewPager
      app:layout_behavior="@string/appbar_scrolling_view_behavior"
      android:layout_width="match_parent"
      android:layout_height="wrap_content">
    </android.support.v4.view.ViewPager>
</android.support.design.widget.CoordinatorLayout>

因此,如您所见,我有一个 ViewPager,它内部有 fragment 并支持滚动。

问题:
我有几个 fragment ,每个 fragment 都有自己的布局,可以向下滚动。

一切都很完美,一切都顺利滚动,但是当我添加一个 TextView 并用 NestedScrollView 包裹它时,它无法正常工作。当我向下滚动时,手指离开屏幕后它会立即停止。

看一下代码:

<android.support.v4.widget.NestedScrollView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
xmlns:android="http://schemas.android.com/apk/res/android">
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">


    <TextView
        android:text="@string/content"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

    <android.support.v7.widget.RecyclerView
        android:id="@+id/castList"
        android:nestedScrollingEnabled="false"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

    </android.support.v7.widget.RecyclerView>

</LinearLayout>

如果删除 TextView 它会起作用。

你知道那可能是什么吗?

谢谢!

最佳答案

我已经解决了这个问题,但是它有一个缺陷。当您将 NestedScrollView 一直向下拖动时,您可以看到 AppBarLayout 有一点晃动。

这是我的解决方案:

public class FixedScrollingBehavior extends AppBarLayout.Behavior{

private boolean isPositive;

public FixedScrollingBehavior() {
}

public FixedScrollingBehavior(Context context, AttributeSet attrs) {
    super(context, attrs);
}

@Override
public boolean onNestedFling(CoordinatorLayout coordinatorLayout, AppBarLayout child, View target, float velocityX, float velocityY, boolean consumed) {
    if(velocityY<0 && isPositive){
        velocityY*=-1;
    }
    return super.onNestedFling(coordinatorLayout, child, target, velocityX, velocityY, isPositive);
}

@Override
public void onNestedPreScroll(CoordinatorLayout coordinatorLayout, AppBarLayout child, View target, int dx, int dy, int[] consumed) {
    isPositive = dy > 0;
    if(target instanceof NestedScrollView) {
        if (dy > 20 && dy < 50 && isPositive) {
            dy = 250;
        } else if (dy > 50) {
            dy*=5;
        }
    }
    super.onNestedPreScroll(coordinatorLayout, child, target, dx, dy, consumed);
}

然后在 XML 文件中应用行为:

<android.support.design.widget.AppBarLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    app:layout_behavior=".utils.FixedScrollingBehavior"
    android:fitsSystemWindows="true">

同样,当您拉动 NestedScrollView 时会出现错误,但总比没有好。

关于android - 使用 NestedScrollView + TextView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43243056/

相关文章:

scroll - 如何仅在用户滚动时显示小部件?

android - java.lang.ClassNotFoundException : Didn't find class "androidx.core.view.ViewPager" on path 异常

java - 如何结合BottomNavigationView和ViewPager?

android - 为什么首页上的 ViewPager 会重置其他页面的数据?

android - 如何加快 Android 5.0(Lollipop) 模拟器的加载时间?

android - Firebase 中云存储的带宽是多少?

javascript - JQuery scrollTop - 跨浏览器兼容性问题

android - 如何在 android 上添加叠加层以映射?

android - 您可以设置 Android Studio/SDK 管理器来检查/获取适用于 Android 的 AWS SDK 的最新版本吗?

CSS水平DIV滚动