在 AppBarLayout 折叠之前防止 RecyclerView 在 AppBarLayout 下滚动

2023-11-22

我正在创建一个RecyclerView带有标题,当您向上滚动时标题会折叠RecyclerView。我可以通过下面的布局非常接近地实现这一点,并使用透明的AppBarLayout, and MyCoolView这是标题。视差效果效果很好。

但是,如果标题仍然可见并且我将RecyclerView时,RV 缓慢滚动到顶部,并且某些项目位于工具栏下方,直到 RV 到达视图顶部。我一直在玩scrollFlags但没有取得理想的结果。关于如何改善投掷体验以免物品被剪裁有什么建议吗?

观看视频并观看其抛出时的情况 ---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>

可能的解决方案(未经测试)。添加一个OnOffsetChangedListener给你的AppBarLayout,并记下偏移值。首先声明该字段:

private boolean shouldScroll = false;

然后,在创建时:

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()回调onScrolled(),可能会出现堆栈溢出。可以通过布尔值或通过删除/添加滚动侦听器来解决
  • 您可能不仅希望在 AppBarLayout 完全展开时防止滚动,而且更普遍地在 AppBarLayout 未折叠时防止滚动。这意味着您不必检查offset != 0,而是为了offset == appBarLayout.getTotalScrollRange()。我认为。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 AppBarLayout 折叠之前防止 RecyclerView 在 AppBarLayout 下滚动 的相关文章

  • 调整添加的绘制组件的大小和奇怪的摆动行为

    这个问题困扰了我好几天 我正在制作一个特殊的绘画程序 我制作了一个 JPanel 并添加了使用 Paint 方法绘制的自定义 jComponent 问题是 每当我调整窗口大小时 所有添加的组件都会 消失 或者只是不绘制 因此我最终会得到一个
  • 在 RESTful Web 服务中实现注销

    我正在开发一个需要注销服务的移动应用程序 登录服务是通过数据库验证来完成的 现在我陷入了注销状态 退一步 您没有提供有关如何在应用程序中执行身份验证的详细信息 并且很难猜测您在做什么 但是 需要注意的是 在 REST 应用程序中 不能有会话
  • Antlr 解析器运算符优先级

    考虑以下语法 我对运算符优先级有疑问 例如 res 2 a b有一个类似的解析树res 2 a b 我知道问题出在哪里 但我没有想到没有相互左递归的 漂亮 解决方案 你能帮我一点忙吗 该语法与自定义访问者一起使用 grammar Math
  • 仅当显式选择行时才关闭 ui-bootstrap typeahead

    我创建了这个jsBin http jsbin com livuqafe 2 edit来证明我遇到的问题 如果您转到此处 请尝试输入 五 并继续 你的自然反应是输入 五 然后按 Tab 如果你想要 五百 你可以向下箭头一次 但是 在这种情况下
  • 如何通过索引访问 JSON 对象中的字段

    我知道这不是最好的方法 但我别无选择 我必须通过索引访问 JSONObject 中的项目 访问对象的标准方法是只写this objectName or this objectName 我还找到了一种获取 json 对象内所有字段的方法 fo
  • 带有 Maven Wrapper 的 Java 17 导致无法识别的 VM 选项“MaxPermSize=512m”

    I use OpenJDK 17 https jdk java net 17 使用 Maven Wrapper 3 8 2 从春季初始化 https start spring io Maven项目 JAR打包 Java 17 Spring
  • 测量窗口偏移

    有没有一种方法可以测量 jQuery 中窗口的偏移量 以便我可以比较 固定 元素和相对定位元素的位置 我需要能够知道窗口滚动了多远 以便我可以使用该图来计算固定元素的高度 相对于视口顶部 和相对对象的高度 相对于顶部 之间的差异文件的内容
  • MySQL 查询计算上个月

    我想计算上个月的订单总额 我收到了从当前日期获取当月数据的查询 SELECT SUM goods total AS Total Amount FROM orders WHERE order placed date gt date sub c
  • 类型或命名空间“MyNamespace”不存在等

    我有通常的类型或命名空间名称不存在错误 除了我引用了程序集 using 语句没有显示为不正确 并且我引用的类是公共的 事实上 我在不同的解决方案中引用并使用相同的程序集来执行相同的操作 并且效果很好 顺便说一句 这是VS2010 有人有什么
  • Pandas 与 Numpy 数据帧

    看这几行代码 df2 df copy df2 1 df 1 df 1 values 1 df2 ix 0 0 我们的教练说我们需要使用 values属性来访问底层的 numpy 数组 否则我们的代码将无法工作 我知道 pandas Data
  • php 数组中出现意外的 json 输出结构

    我正在尝试转换动态数据 如何从 PHP 获取此 JSON JSON 122240cb 253c 4046 adcd ae81266709a6 item 0 3 这就是我所做的 但它不起作用 PHP json array 122240cb 2
  • 现代编译器是否优化乘以 1 和 -1

    如果我写 template
  • 将第三个表链接到多对多关联中的桥接表

    设计这个数据库的正确方法是什么 这是我设置表格的方式 我在名为 教师 的表和名为 仪器 的表之间存在多对多关系 然后我有一个连接两者的桥接表 我想将另一个表与 BRIDGE 表关联起来 意思是乐器 老师的组合 该表有 3 行 指定老师可以教
  • Amazon RDS for SQL Server 是否支持 SSIS?

    从谷歌搜索中读到一些相互矛盾的答案 不确定答案是是 否还是可能 我觉得读的时候已经很清楚了this http docs aws amazon com AmazonRDS latest UserGuide CHAP SQLServer htm
  • GUI Java 程序 - 绘图程序

    我一直试图找出我的代码有什么问题 这个想法是创建一个小的 Paint 程序并具有红色 绿色 蓝色和透明按钮 我拥有我能想到的让它工作的一切 但无法弄清楚代码有什么问题 该程序打开 然后立即关闭 import java awt import
  • 使用velocity.js制作可拖动元素的动画

    我正在使用velocity js 为用户拖动的可拖动 SVG 元素设置动画 然而 velocity js 将先前的 mousemove 坐标排队并通过所有后续的 mousemove 坐标进行动画处理 我想要的是velocity js 不要对
  • 如何修复:“无法解析类型 java.lang.CharSequence。它是从所需的 .class 文件间接引用的”消息? [复制]

    这个问题在这里已经有答案了 我正在尝试使用这个字符串 amountStr amountStr replace replace replace 但我收到一条错误消息 我知道我收到的错误消息是因为我刚刚发布的字符串已过时 所以我想知道该字符串的
  • 使用 WGL 创建现代 OpenGL 上下文?

    我正在尝试使用 Windows 函数创建 OpenGL 上下文 现代版本 基本上代码就是 创建窗口类 注册班级 创建一个窗口 choose PIXELFORMATDESCRIPTOR并设置它 创建旧版 OpenGL 上下文 使上下文成为当前
  • 禁用允许文本选择的

    残疾人可以吗
  • 探查器模板可以迁移到较新版本的 SQL Profiler 吗?

    是否可以将 Profiler 模板迁移到较新版本的 SQL Server 就我而言 我想将 SQL 2008 模板带到 2012 年 我尝试过 1 直接文件复制和 2 导出 导入 在这两种情况下 旧模板都会运行 但无法修改 修改后会出现以下

随机推荐

  • Google AppEngine:自定义身份验证

    我可以使用 Google 帐户在 AppEngine 中验证我的用户的方式简直太棒了 但是 我需要使用我的自定义认证登录系统 我将有一个 AppUsers 表 其中包含用户名和加密密码 我在 gae 上读到了一些有关会话的内容 但我需要帮助
  • 使div的高度随着其内容而扩展

    我有这些嵌套的 div 我需要主容器扩展 高度 以容纳内部的 DIV
  • 错误的ELF类:ELFCLASS32(可能原因:架构字宽不匹配)

    我有一个奇怪的异常 说 ELF 类错误 但包装器设置正确 要使用比利时身份证发行商官方网站上的 SDK 读取比利时身份证 http eid belgium be en binaries beid sdk 3 5 3 ubuntu 9 10
  • django 中的分页 - 原始查询字符串丢失

    我使用文档中的代码对数据进行分页 try data paginator page request GET get page except PageNotAnInteger page 1 data paginator page 1 excep
  • 锥体图像细化

    为了制作一个漂亮的与平面相交的圆锥体三维图形 我选择对 Mathematica 中的现有方法 即 S Mangano 和 S Wagon 的书籍 进行轻微的重新排列 下面的代码假定显示所谓的丹德林结构 内球体和外球体与圆锥体内部相切 并且与
  • 如何在 javascript 中使用 python 变量?

    我一直在寻找一种使用 selenium 的网络驱动程序访问不可见文本字段的方法 我让它工作的唯一方法是使用 driver execute script document getElementById text field value XYZ
  • Stringify 一级宏展开 C

    是否可以将此 C 宏字符串化 define GPIO INT PIN GPIO PORT D GPIO PIN IRQ RISING GPIO PIN5 使用类似的东西 MY STRINGFY GPIO INT PIN to get GPI
  • 计算“查找”结果的最佳方法是什么?

    我当前的解决方案是find
  • Python:两个相同长度列表的元素连接

    我有两个相同长度的列表 a 1 2 2 3 3 4 b 9 10 11 12 13 19 20 并想将它们结合起来 c 1 2 9 2 3 10 11 3 4 12 13 19 20 我这样做是通过 c for i in range 0 l
  • python pandas 解析带有月份名称的日期时间字符串

    有人可以向我指出一种格式或代码片段来解析格式如下的日期吗 04SEP12 00 00 00 That dd mm YY HH MM SS不起作用 使用格式字符串 d b y H M S 并将其作为格式传递to datetime 您可以在中找
  • iOS - 在 Localized.strings 中用粗体字符串强调

    有没有办法像这样在可本地化文件中加粗一些单词 Pending network connection b Pending b network connection 我里面有这个字符串 我只想强调某些单词 camSave To complete
  • 半屏视图,iOS 侧边栏菜单

    因为我想在屏幕左侧显示许多菜单 就像下面一样 这是一个新的 Facebook 应用程序 当您单击其周围显示为红色方块的栏时 左侧的列表视图将在之后出现在我的应用程序中滑动右侧部分是否有任何 SDK 可以添加此内容 请帮助我 看看吧 http
  • 从 HTML 导出到 PDF (C#) [重复]

    这个问题在这里已经有答案了 可能的重复 在 NET 中将 HTML 转换为 PDF 在我们的应用程序中 我们制作 html 文档作为报告和导出 但现在我们的客户想要一个将该文档保存在他们的电脑上的按钮 问题是该文档包含图像 您可以使用以下代
  • CSS3选择器:带有类名的第一个类型?

    是否可以使用 CSS3 选择器 first of type选择具有给定类名的第一个元素 我的测试没有成功 所以我想是不是 代码 http jsfiddle net YWY4L p first of type color blue p myc
  • 将数字写入文本文件 - 批处理文件

    这应该是一个简单的问题 我对自己很失望 但我一生都找不到解决方案 我正在尝试将数字 1 写入 BAT 脚本中的文本文件 如果我执行下面的操作 它会起作用 但会在我不能拥有的数字后面留下一个尾随空格 我知道您可以通过删除 1 和 gt 之间的
  • JavaFX 中具有自动拉伸图块的 TilePane

    JavaFX 有没有办法充分利用 TilePane 或 FlowPaneand网格窗格 这是我想要实现的目标 首先 我喜欢 GridPane 的想法 我可以在其中设置一个 M N 网格 该网格会在其父容器内自动调整大小 以将空间平均划分为
  • Angular 2 - 命名路由器出口,没有可怕的 URL

    我想要两个路由器插座 一个是主插座 另一个是模态插座 当导航至 login 我想在主出口中显示我的主页组件 并在模态出口中显示我的登录组件 像这样的东西 path login component HomeComponent path log
  • 将 localstack 与 Spring Cloud AWS 2.3 结合使用时出现未知主机

    AWS S3 的 ResourceLoader 可以很好地处理这些属性 cloud aws s3 endpoint s3 amazonaws com lt custom endpoint added in spring cloud aws
  • Mathematica 中的动态编程:如何自动本地化和/或清除记忆函数的定义

    在 Mathematica 8 0 中 假设我有一些常量 a 7 b 9 c 13 d 002 e 2 f 1 我想用它们来评估一些相互关联的函数 g 0 k 0 g t 0 e g t k g t 1 k a h t 1 k 1 b h
  • 在 AppBarLayout 折叠之前防止 RecyclerView 在 AppBarLayout 下滚动

    我正在创建一个RecyclerView带有标题 当您向上滚动时标题会折叠RecyclerView 我可以通过下面的布局非常接近地实现这一点 并使用透明的AppBarLayout and MyCoolView这是标题 视差效果效果很好 但是