将协调器布局与 recyclerview 一起使用时滚动卡顿
Scroll stuttering while using coordinator layout with recyclerview
我在 Coordinatorlayout
和 ViewPager
实施方面遇到问题。
为了重现这一点,您必须大力向下滚动,当它仍在发生时尝试向上滚动项目列表 - 可以看到一种摇晃的停顿效果,就好像 CoordinatorLayout 试图单独滚动视图一样方向比它的 child (RecyclerView
).
你可以在这里查看我的布局:
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/mainContainer"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<android.support.design.widget.AppBarLayout
android:id="@+id/appBarLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<android.support.design.widget.CollapsingToolbarLayout
android:id="@+id/collapsingToolbarLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_scrollFlags="scroll|exitUntilCollapsed">
<FrameLayout
android:id="@+id/headerContainer"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</android.support.design.widget.CollapsingToolbarLayout>
<android.support.design.widget.TabLayout
android:id="@+id/tabControl"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:tabIndicatorHeight="4dp"
app:tabMaxWidth="500dp">
</android.support.design.widget.TabLayout>
<LinearLayout
android:id="@+id/topLayout"
android:layout_width="match_parent"
android:layout_height="48dp"
android:orientation="vertical"
android:visibility="gone" />
</android.support.design.widget.AppBarLayout>
<android.support.v4.view.ViewPager
android:id="@+id/tabContainer"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_behavior="@string/appbar_scrolling_view_behavior" />
</android.support.design.widget.CoordinatorLayout>
只是为了提供一些进一步的细节:
headerContainer
包含 ConstraintLayout
以及一些内容,例如一堆文本视图、按钮 - 非常普通。
tabContainer
包含 LinearLayout
和项目列表 (recyclerview)
将其添加到 ViewPager 片段中的 recyclerView 中..
recyclerView.setNestedScrollingEnabled(false);
This is happening because of the app:layout_behavior="@string/appbar_scrolling_view_behavior"
behavior of the viewpager.. this is causing the nestedScrolling.. that is why you feel the shaky effect..
将此行添加到您的 RecyclerView
Recyclerview.setNestedScrollingEnabled(false);
我在 Coordinatorlayout
和 ViewPager
实施方面遇到问题。
为了重现这一点,您必须大力向下滚动,当它仍在发生时尝试向上滚动项目列表 - 可以看到一种摇晃的停顿效果,就好像 CoordinatorLayout 试图单独滚动视图一样方向比它的 child (RecyclerView
).
你可以在这里查看我的布局:
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/mainContainer"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<android.support.design.widget.AppBarLayout
android:id="@+id/appBarLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<android.support.design.widget.CollapsingToolbarLayout
android:id="@+id/collapsingToolbarLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_scrollFlags="scroll|exitUntilCollapsed">
<FrameLayout
android:id="@+id/headerContainer"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</android.support.design.widget.CollapsingToolbarLayout>
<android.support.design.widget.TabLayout
android:id="@+id/tabControl"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:tabIndicatorHeight="4dp"
app:tabMaxWidth="500dp">
</android.support.design.widget.TabLayout>
<LinearLayout
android:id="@+id/topLayout"
android:layout_width="match_parent"
android:layout_height="48dp"
android:orientation="vertical"
android:visibility="gone" />
</android.support.design.widget.AppBarLayout>
<android.support.v4.view.ViewPager
android:id="@+id/tabContainer"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_behavior="@string/appbar_scrolling_view_behavior" />
</android.support.design.widget.CoordinatorLayout>
只是为了提供一些进一步的细节:
headerContainer
包含 ConstraintLayout
以及一些内容,例如一堆文本视图、按钮 - 非常普通。
tabContainer
包含 LinearLayout
和项目列表 (recyclerview)
将其添加到 ViewPager 片段中的 recyclerView 中..
recyclerView.setNestedScrollingEnabled(false);
This is happening because of the
app:layout_behavior="@string/appbar_scrolling_view_behavior"
behavior of the viewpager.. this is causing the nestedScrolling.. that is why you feel the shaky effect..
将此行添加到您的 RecyclerView
Recyclerview.setNestedScrollingEnabled(false);