我可以向您展示比我告诉您更好的东西,所以这是我的 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/