我可以向您展示比我能告诉您的更好的内容,下面是我的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,它就能工作。
你知道那可能是什么吗?
谢谢!
发布于 2017-04-06 01:12:20
我已经解决了这个问题,但是它有一个缺点。当您将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时会有一个bug,但它总比什么都没有好。
https://stackoverflow.com/questions/43243056
复制相似问题