CoordinatorLayout+AppBarLayout 提供最佳浏览体验

2024-01-13 10:18

本文主要是介绍CoordinatorLayout+AppBarLayout 提供最佳浏览体验,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

博主声明:

转载请在开头附加本文链接及作者信息,并标记为转载。本文由博主 威威喵 原创,请多支持与指教。

本文首发于此   博主:威威喵  |  博客主页:https://blog.csdn.net/smile_running

 

感受 Material Design UI 魅力,你不能错过的 Material Design 全系列文章:

Material Design 之一 BottomNavigationView + ViewPager + Fragment 仿微信底部导航效果

Material Design 之二 Toolbar + DrawerLayout + NavigationView 实现QQ侧拉抽屉效果

Material Design 之三 TabLayout + ViewPager + Fragment 今日头条标题切换效果

Material Design 之四 SwipeRefreshLayout + CardView + RecyclerView 精美瀑布流效果

Material Design 之五 CoordinatorLayout + AppBarLayout 提供最佳浏览体验

Material Design 之六 CollapsingToolbarLayout + FloatingActionButton 打造精美详情界面

Material Design 之七 TextInputLayout+TextInputEditText 打造精美的登录界面

    由于我们在 RecyclerView 上滑的时候,通常我们都是往下去浏览下一条数据的,我们在浏览信息的时候当然是希望屏幕越大越好了,可是屏幕大小的更改,这就无能为力了,除了换手机也没啥好办法。除了屏幕大小以外,我们的应用内也希望得到最大的屏幕空间让我们去浏览信息,这就能够较大的提升阅读体验。

    为了引出这样的情境,我们有这样的一个例子,一个主标题栏 toolbar 下面分别有三个小标题分类,而标题下面是三个 RecyclerView 用于显示信息,这三个小标题使用的是 TabLayout 实现的,为了提高屏幕的利用率,提供最佳的阅读效果,我们希望把这个 TabLayout 给隐藏掉,但又不能一直隐藏,我还需要继续使用,看一下这个情境:

 根据上面这个例子,我现在需要这样做。

    我往手指下滑动时,代表我在浏览更多信息,这时候上面的三个分类栏要把它隐藏掉,而当我手机往上滑动时,可能是浏览完了或者要切换其他 tab 页面,这时候我再把三个分类栏显示出来。就是要做到用时出现、没用时隐藏的功能。

    不清楚?没关系,我们来看看要实现的效果动态图就好了,先看效果如何,再进行实现。

    我描述的不清楚没有任何关系,看上面那个效果图不久一目了然了。好吧,怎么实现这种效果呢,可能要我们自定义那有难度,可是 design 包下面给我们提供了两个控件,CoordinatorLayout 和 AppBarLayout,简简单单就可以实现这样的效果了,赶紧来试一试吧。本篇代码基于上一篇:SwipeRefreshLayout+CardView+RecyclerView 精美瀑布流效果

    首先,来介绍一下 CoordinatorLayout 这个控件,它是一个加强的 FrameLayout,在它的包裹下,所有的滚动事件它都可以监听到,并且会根据我们设定的属性,做出相应的处理,使界面更加炫酷吧。

    另一个是 AppBarLayout 控件,它必须作为 CoordinatorLayout 里面出现,也就是要被隐藏和出现的那部分视图,执行相应的行为。

    既然它都搞成这么简单了,必定是要按照它的规定来布局的,乱搞的话,它就不起作用了。下面,我们通过一个简单的 View 分层图,马上就学会怎么使用了。

     还有注意一点,那个可滑动的 View 不能是 ListView,ScrollView 这种旧包下的控件,否则也是不起作用的。之前有一次,我是使用的 ListView,结果没有任何效果。

    来看一下这个案例的布局,它的头部是一个 TabLayout,下面是一个 ViewPager 存放三个 RecyclerView,也就是说只要 CoordinatorLayout 的子 View 中有 RecyclerView 即可,不管它外部是不是有 ViewPager 包裹着。

    最后来看一下我们的布局文件的代码:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"android:layout_width="match_parent"android:layout_height="match_parent"><android.support.design.widget.CoordinatorLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"><android.support.design.widget.AppBarLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"><android.support.design.widget.TabLayoutandroid:id="@+id/tab_layout"android:layout_width="match_parent"android:layout_height="56dp"android:background="#fcfcfc"app:layout_scrollFlags="scroll|enterAlways|snap"app:tabIndicatorColor="#ccccff"app:tabSelectedTextColor="#9966cc"app:tabTextColor="#a2c699" /></android.support.design.widget.AppBarLayout><android.support.v4.view.ViewPagerandroid:id="@+id/one_view_pager"android:layout_width="match_parent"android:layout_height="match_parent"android:layout_below="@+id/tab_layout"app:layout_behavior="@string/appbar_scrolling_view_behavior" /></android.support.design.widget.CoordinatorLayout></RelativeLayout>

    把这个代码对照着我画的那张图,你一看就明白了,ViewPager 就相当于那个黑色框框包裹了 RecyclerView,而 AppBarLayout 里面包裹的就是 TabLayout,我们要它执行行为的 View。

    那它到底是怎么控制的呢,可以发现代码中的 ViewPager 下有这样的一个属性:

app:layout_behavior="@string/appbar_scrolling_view_behavior"

    这个属性的意思是:放置在可以滚动行为的 View 上,这样的话 CoordinatorLayout 就可以对其进行滚动行为监听,然后根据监听到的一些事件反馈给 AppBarLayout,所以就解释了 AppBarLayout 存在的必要性。

再看 TabLayout 下有这样一个属性:

app:layout_scrollFlags="scroll|enterAlways|snap"

    当 CoordinatorLayout 监听到 ViewPager 内部存在滚动行为的 View 时,也就是 RecyclerView,AppBarLayout 就会根据 layout_scrollFlags 执行相应的行为。上面代码中,我们写了三个行为:scroll、enterAlways、snap

下面来解释一下这几个的意思。

  • scroll 表示:RecyclerView 往下滚时,我们在看更多信息,这时 AppBarLayout 会隐藏。
  • enterAlways 表示: 与 scroll 相反,向上滚时它就出现了。
  • snap 表示: 有时候我们会滚动到一半,就是 AppBarLayout 出现或隐藏一半状态,写上 snap 就会自动帮你隐藏或者出现。

描述不清楚!好吧,就是这个样子的,自己看吧。

那么至此,我们又学习了 Material Design 库下的两个比较炫酷的 View,接下来,在下篇文章中,我们再学习几个更炫酷的 View,然后把整个  Material Design 库常用 view 综合一下。

这篇关于CoordinatorLayout+AppBarLayout 提供最佳浏览体验的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/601118

相关文章

乐鑫 Matter 技术体验日|快速落地 Matter 产品,引领智能家居生态新发展

随着 Matter 协议的推广和普及,智能家居行业正迎来新的发展机遇,众多厂商纷纷投身于 Matter 产品的研发与验证。然而,开发者普遍面临技术门槛高、认证流程繁琐、生产管理复杂等诸多挑战。  乐鑫信息科技 (688018.SH) 凭借深厚的研发实力与行业洞察力,推出了全面的 Matter 解决方案,包含基于乐鑫 SoC 的 Matter 硬件平台、基于开源 ESP-Matter SDK 的一

在服务器上浏览图片

@StarSky 2018-10-26 15:09 字数 15971 阅读 28 https://www.zybuluo.com/StarSky/note/1294871 来源 2018-09-27 线上服务器安装 imgcat Tool   2018-09-27 线上服务器安装 imgcat 0. 准备文件:iterm2_shell_integration.bash1. 在有权限

9 个 GraphQL 安全最佳实践

GraphQL 已被最大的平台采用 - Facebook、Twitter、Github、Pinterest、Walmart - 这些大公司不能在安全性上妥协。但是,尽管 GraphQL 可以成为您的 API 的非常安全的选项,但它并不是开箱即用的。事实恰恰相反:即使是最新手的黑客,所有大门都是敞开的。此外,GraphQL 有自己的一套注意事项,因此如果您来自 REST,您可能会错过一些重要步骤!

糖尿病早中期症状常常被人们忽视,从而错过最佳的干预时机。

我们都知道糖尿病有“三多一少”(多饮、多尿、多食、体重减少)的典型症状。然而,现实中糖尿病的表现并非总是如此清晰。更麻烦的是,糖尿病具有很强的隐匿性,若不做血糖检查,多数人难以察觉自己已患病。 今天,给大家说明下糖尿病的早中期症状,期望能有所帮助。如果您出现以下 10 种症状中的 5 种 及以上,强烈建议尽快做血糖检测来确认 早日做到早预防早控制! “手部或脚部有刺痛、麻木的感觉”

Netty ByteBuf 释放详解:内存管理与最佳实践

Netty ByteBuf 释放详解:内存管理与最佳实践 在Netty中(学习netty请参考:🔗深入浅出Netty:高性能网络应用框架的原理与实践),管理ByteBuf的内存是至关重要的(学习ByteBuf请参考:🔗Netty ByteBuf 详解:高性能数据缓冲区的全面介绍)。未能正确释放ByteBuf可能会导致内存泄漏,进而影响应用的性能和稳定性。本文将详细介绍如何正确地释放ByteB

成章数据库安装体验

对标Redis的国产数据库 一位来自国产数据库的朋友想请我试用一下他们的产品。并且直言早期问题比较多,还请多多包涵。一般对于这种比较客观和友好的我都愿意试试。对于怼天怼地吊打谁的我个人就不尝试了。 他们中文名字叫“成章数据库“我就尝试从一个不了解产品的人的角度去安装尝试一下。我也和他们反馈了说这个怎么一个汉字都没有啊。(同样的话我以前对PingCAP的CTO黄东旭老师说过,后来TiDB的就都有

windows server 2012 R2 安装桌面体验,安装ActiveSync时提示缺少Windows组件

第一步:启动《服务器管理器》 右键桌面上的"计算机",管理,打开服务器管理器 第二步:选择所有服务器,右键显示出来的服务器,添加角色和功能 第三步,在弹出的弹窗,一直点下一步下一步,到功能位置。 注意安装类型:选择“基于角色或基于功能安装” 然后 点击一下步 服务器选择 :操作: 无需配置,选择下一步 服务器角色:操作: 无需配置,选择下一步 功能 操作 选择 “用户界面和基础结构

交通大数据分析与挖掘实训【对提供的CSV格式数据使用pandas库分析-Matplotlib库绘图】

背景: 《交通大数据分析与挖掘》实训 指    导   书  编著 二○二四年五月 一、实训目的 1、掌握python开发环境(如Anaconda)及Numpy等常见第三方库的使用; 2、熟悉Anaconda在线编程平台,学会基本的python程序编写、编译与运行程序的方法及函数语句; 3、学会导入不同格式数据文件,掌握不同类型数据的基本处理和分析思路; 4、熟练运用所学第三方库,结合相

视频批量剪辑新境界:一键转码MP4至MP3并自动删除原文件,轻松优化存储空间与播放体验

随着数字媒体的飞速发展,视频文件已成为我们生活中不可或缺的一部分。然而,大量视频文件的累积不仅占据了宝贵的存储空间,而且在某些情况下,我们更希望提取视频中的音频内容。为了满足这一需求,我们推出了全新的视频批量剪辑方案,让你轻松实现MP4到MP3的转码,并自动删除原文件,优化存储空间,提升播放体验。 首先,让我们进入“视频剪辑高手”的主页面。简洁明了的界面设计,让您一眼就能找到所需的功能板