使用NestedScrollView + TextView

时间:2017-04-05 23:06:22

标签: 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里面有片段并支持滚动。

问题:
我有一些片段,每个片段都有自己的布局,假设向下滚动。

一切都很完美,一切都顺利滚动但是当我添加一个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,则可以使用。

你知道那可能是什么吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

我已经解决了这个问题,然而,它有一个缺陷。当您将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时会有一个错误,但它比没有好。