当前位置: 首页 > 知识库问答 >
问题:

在折叠AppBarLayout之前,阻止RecyclerView在AppBarLayout下滚动

狄誉
2023-03-14

我正在创建一个<code>RecyclerView</code>,其中当您向上滚动<code>RecyclerView>时,标题会折叠。我可以通过下面的布局实现这一点,使用透明的AppBarLayoutMyCoolView,这是标题。视差效果很好。

但是,如果标头仍然可见,并且我抛出Recy首脑视图,RV会慢慢滚动到顶部,并且一些项目在工具栏下,直到RV到达视图的顶部。我一直在玩scrollFlages,但没有达到理想的结果。关于如何改善抛出体验以使项目不被剪切的任何建议?

观看视频并观看其投掷时--- https://www.dropbox.com/s/jppd6m7zo41k23z/20160609_151309.mp4?dl=0

<android.support.design.widget.CoordinatorLayout>

     <android.support.design.widget.AppBarLayout
         android:background="#00000000">

         <android.support.design.widget.CollapsingToolbarLayout
            app:layout_scrollFlags="scroll|exitUntilCollapsed">

             <com.android.myapp.MyCoolView
                app:layout_collapseMode="parallax"/>

         </android.support.design.widget.CollapsingToolbarLayout>

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

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

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

共有3个答案

厍浩广
2023-03-14

将回收器视图包装在 FrameLayout 中可以解决此问题。

您还需要将appbar_scrolling_view_behavior从RecyclerView移动到FrameLayout,以便将其正确定位在AppBarLayout下方。

<android.support.design.widget.CoordinatorLayout>

    <android.support.design.widget.AppBarLayout
        android:background="#00000000">

        <android.support.design.widget.CollapsingToolbarLayout
            app:layout_scrollFlags="scroll|exitUntilCollapsed">

            <com.android.myapp.MyCoolView
               app:layout_collapseMode="parallax"/>

        </android.support.design.widget.CollapsingToolbarLayout>

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

    <!-- BEGIN SOLUTION -->
    <!-- the layout behavior needs to be set on the FrameLayout, not the RecyclerView -->
    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_behavior="@string/appbar_scrolling_view_behavior"
        >

        <!--This RecyclerView MUST be wrapped in a FrameLayout-->
        <!--This prevents the RecyclerView from going behind the AppBarLayout-->
        <android.support.v7.widget.RecyclerView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            />

    </FrameLayout>
    <!-- END SOLUTION -->

</android.support.design.widget.CoordinatorLayout>
盖和泰
2023-03-14

也许你可以像这样将layout_behavior=“@string/appbar_scrolling_view_behavior”添加到你的RecylerView中。

<android.support.v7.widget.RecyclerView
        android:layout_width="match_parent"
        android:layout_height="match_parent" app:layout_behavior="@string/appbar_scrolling_view_behavior" />
壤驷阳波
2023-03-14

可能的解决方案(未经测试)。将< code > OnOffsetChangedListener 添加到您的< code>AppBarLayout中,并记下偏移值。首先,声明这个字段:

private boolean shouldScroll = false;

然后,onCreate:

AppBarLayout appbar = findViewById(...);
appbar.addOnOffsetChangedListener(new OnOffsetChangedListener() {
    @Override
    void onOffsetChanged(AppBarLayout appbar, int offset) {
        // Allow recycler scrolling only if we started collapsing.
        this.shouldScroll = offset != 0;
    }
});

现在,向RecyclerView添加一个滚动侦听器。每当尝试滚动时,如果AppBarLayout仍处于展开状态,则恢复滚动:

RecyclerView recycler = findViewById(...);
recycler.addOnScrollListener(new OnScrollListener() {
    @Override
    void onScrolled(RecyclerView recycler, int dx, int dy) {
        // If AppBar is fully expanded, revert the scroll.
        if (!shouldScroll) {
            recycler.scrollTo(0,0);
        }
    }
});

但这可能需要一些调整。我看到两个问题:

  • 如果scrollTo()向后调用Scrolled(),则可能出现堆栈溢出。可以使用布尔值或通过删除/添加滚动监听器来解决
  • 可能您不仅希望在AppBarLayout完全展开时阻止滚动,而且更一般地,您还希望在AppBarLayout未折叠时阻止滚动。这意味着您不必检查偏移量!=0,而不是offset==appBarLayout.getTotalScrollRange()。我想
 类似资料:
  • 当我试图滚动它触摸AppBarLayout部分时,滚动折叠AppBar有问题。而且有时滚动不流畅。 这是一个短视频(1米30秒)的问题:https://www.youtube.com/watch?v=n32N9Z4S3SA 这是指向简单项目的链接(仅在 github 上出现此问题):https://github.com/yozhik/Reviews/tree/master/app/src/main

  • 我想实现像Google Play App一样的平滑滚动行为。我尝试过这里提到的解决方案: 解决方案1 解决方案2 解决方案3 但所有上述解决方案都没有像在Google Play应用程序中那样给出预期的结果。以下是xml代码: 如何实现平滑滚动? 编辑:以下是recyclerview适配器 }

  • 我正在使用AppBarLayout和CollasingToolBarLayout的新CoordinatorLayout。在AppBarLayout下面,我有一个包含内容列表的RecyclerView。 我已经验证了当我在列表上下滚动时,fling scrolling可以在RecyclerView上工作。不过,我也希望AppBarLayout在扩展期间能够平滑滚动。 当向上滚动以展开CollaSpi

  • 我正在开发一个Android应用程序,其中我使用、和来使用折叠工具栏功能。 我在布局中使用在相同的布局中展开和折叠。当我试图从屏幕中心向上滚动时,它不起作用,但当我试图从屏幕右角向上滚动屏幕时,它会平滑滚动。 下面提到的是我的 xml 文件 layout.xml 理想的结果是,当我尝试从屏幕中心向上滚动时,它应该像我从手机右角向上滚动一样工作。 请观看下面提到的视频,以便更清楚地了解问题 http

  • 当RecycerView有足够的内容可以滚动时,页面看起来很好。但是,当RecycerView为空或没有足够的内容可滚动时,行为是的AppBarLayout子级将继续滚动-这看起来很奇怪。 当NestedScrollView为空时,有没有办法停止AppBarLayout子滚动?

  • 我将CoordinatorLayout与AppBarLayout和CollapsingToolbarLayout一起使用。还有一个内容的NestedScrollView。当我在CollapsingToolbarLayout上滚动时,当Collapsing工具栏Layout折叠时,滚动停止。我想要的是继续滚动NestedScrollView的内容。当我在NestedScrollView上滚动时,它会