我可以告诉你比我能告诉你的更好,所以这是我的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
,则可以使用。
你知道那可能是什么吗?
谢谢!
答案 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
时会有一个错误,但它比没有好。