使用水平滚动嵌套的RecyclerView中的滚动行为

时间:2015-09-11 14:00:30

标签: android xml material-design android-toolbar android-coordinatorlayout

我必须在每个项目中创建具有嵌套水平RecyclerView的垂直RecyclerView。一切都在CoordinatorLayout之内。当我通过点击外部嵌套的RecyclerView工具栏隐藏滚动时,但当我通过点击嵌套的一个工具栏滚动父回收器时保持。

任何帮助都将不胜感激。

这是我的xml布局:

main_activity.xml:

<android.support.design.widget.CoordinatorLayout 
   ...>

<FrameLayout
    android:id="@+id/fragment_frame"
    ...
    android:fitsSystemWindows="true"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"/>

<android.support.design.widget.AppBarLayout
    ...
    android:fitsSystemWindows="true"
    android:id="@+id/appbar_layout">

        <include layout="@layout/toolbar"/>

</android.support.design.widget.AppBarLayout>
</android.support.design.widget.CoordinatorLayout>

这是toolbar.xml:

<android.support.v7.widget.Toolbar
    android:id="@+id/main_toolbar"
    ...
    android:fitsSystemWindows="true"
    app:layout_scrollFlags="scroll|enterAlways">

    <TextView .../>

</android.support.v7.widget.Toolbar>

fragment.xml之:

<android.support.v7.widget.RecyclerView
    ...
    android:scrollbars="vertical"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"/>

和recycler_view_item.xml:

<RelativeLayout ...>

    <TextView .../>

    <!-- fixme(CullyCross) fix bug with hiding toolbar -->
    <android.support.v7.widget.RecyclerView
        ...
        android:scrollbars="horizontal"
        app:layout_behavior="@string/appbar_scrolling_view_behavior"
        />

</RelativeLayout>

谢谢,
安东

3 个答案:

答案 0 :(得分:54)

根据我的要求,到目前为止我找到了足够好的解决方案:

在我的情况下,我有一个nestedScrollView,其中RecyclerView设置为水平滚动内部。对于RecyclerView中的每一个,我都是以编程方式完成的:

restaurantsRecylerView.setHasFixedSize(true); 
restaurantsRecylerView.setNestedScrollingEnabled(false);

你可能不想要使用fixedSize,不确定它是否会有任何区别,我的列表总是25,所以我可以用它来表现。完成此操作后,即使我触摸recyclerViews

,我也可以毫无问题地滚动

希望有所帮助

答案 1 :(得分:20)

尝试使用android.support.v4.widget.NestedScrollView内的RecyclerView

<android.support.v4.widget.NestedScrollView
        android:id="@+id/nScrollView"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

<!-- Set other views of your Layout -->

</android.support.v4.widget.NestedScrollView>

还可以尝试Toolbar

中的不同layout_scrollFlags
RecylerView.setNestedScrollingEnabled(false); // set it true or false as per requirement

答案 2 :(得分:1)

我们可以用XML实现这个目标

android:nestedScrollingEnabled="false"