Android CoordinatorLayout的使用——实现Toolbar的隐藏和折叠

Android Design Support Library(三)用CoordinatorLayout实现Toolbar隐藏和折叠 此文的代码在 Android Design Support Library(一)用TabLayout实现类似网易选项卡动态滑动效果代码的基础上进行修改,如果你没有看过本系列的第一篇文章最好先看一看。 阅读详情
AI摘要

本文介绍如何使用CoordinatorLayout配合AppBarLayout和CollapsingToolbarLayout实现Toolbar的隐藏与折叠效果。通过设置scrollFlags属性和layout_behavior属性,使Toolbar在滑动过程中产生动画效果。

简单介绍下CoordinatorLayout

CoordinatorLayout
public class CoordinatorLayout
extends ViewGroup implements NestedScrollingParent2
java.lang.Object
  ↳ android.view.View
    ↳ android.view.ViewGroup
     ↳ android.support.design.widget.CoordinatorLayout

CoordinatorLayout 是一个“super-powered FrameLayout”,主要用于两个方面
1. 作为最顶层的控件
2. 作为一个父控件于一个或者多个子控件进行交互

CoordinatorLayout使用新的思路通过协调调度子布局的形式实现触摸影响布局的形式产生动画效果。CoordinatorLayout通过设置子View的 Behaviors来调度子View。系统(Support V7)提供了AppBarLayout.Behavior, AppBarLayout.ScrollingViewBehavior, FloatingActionButton.Behavior, SwipeDismissBehavior 等。


这篇文章主要讲述ToolBar 的隐藏和折叠

一.配合AppBarLayout 控件,实现隐藏

AppBarLayout
public class AppBarLayout
extends LinearLayout
java.lang.Object
   ↳ android.view.View
   ↳ android.view.ViewGroup
     ↳ android.widget.LinearLayout
      ↳ android.support.design.widget.AppBarLayout

AppBarLayout 继承LinearLayout,子控件默认时竖直方向显示。它支持滑动手势,它的子控件可以通过在代码中调用setScrollFlags(int)或者在XML里app:layout_scrollFlags来设置它的滑动手势,但是前提是根布局是CoordinatorLayout。

下面介绍下scrollFlags 的5种参数:
  • scroll: 所有想滚动出屏幕的view都需要设置这个flag, 没有设置这个flag的view将被固定在屏幕顶部。例如,TabLayout 没有设置这个值,将会停留在屏幕顶部
  • enterAlways: 每次向下的滚动都会导致该view变为可见,启用快速“返回模式”
  • snap:当下拉不到一定高度时,Toolbar回弹回去,如果上滑不到一定高度,Toolbar不会收缩。但是上滑时会全隐藏Toolbar
  • enterAlwaysCollapsed: 当你的视图已经设置minHeight属性又使用此标志时,你的视图只能已最小高度进入,只有当滚动视图到达顶部时才扩大到完整高度
  • exitUntilCollapsed: 滚动退出屏幕,最后折叠在顶端,向下滑时要等item是第一个时才能滑出Toolbar。

OK,下面看一下 app:layout_scrollFlags="scroll|enterAlways" 这样设置的效果
布局文件如下:

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout 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.AppBarLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">

        <android.support.v7.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            app:layout_scrollFlags="scroll|enterAlways" />

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

    <android.support.v7.widget.RecyclerView
        android:id="@+id/recyclerview"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_behavior="@string/appbar_scrolling_view_behavior" />

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

这里还要注意一个地方 :RecyclerView 的layout_behavior 属性,其实@string/appbar_scrolling_view_behavior 对应着的AppBarLayout.ScrollingViewBehavior,正是这个Behavior 实现了组件及之间的滑动交互,控制着Toolbar 的隐藏,所以这个参数是绝对不能忽略的。

AppBarLayout的子控件不仅仅可以设置为Toolbar,也可以包含其他的View,比如说包裹一个 TabLayout。

代码及效果如下:

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout 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.AppBarLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">

        <android.support.v7.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            app:layout_scrollFlags="scroll|enterAlways" />

        <android.support.design.widget.TabLayout
            android:id="@+id/tablayout"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:tabMode="fixed">

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

    <android.support.v4.view.ViewPager
        android:id="@+id/viewpager"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_behavior="@string/appbar_scrolling_view_behavior">

    </android.support.v4.view.ViewPager>

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

二、配合CollapsingToolbarLayout,实现ToolBar的折叠

CollapsingToolbarLayout
public class CollapsingToolbarLayout
extends FrameLayout
java.lang.Object
  ↳ android.view.View
   ↳ android.view.ViewGroup
      ↳ android.widget.FrameLayout
       ↳android.support.design.widget.CollapsingToolbarLayout

CollapsingToolbarLayout:顾名思义就是可折叠的toolbar布局,继承FrameLayout。CollapsingToolbarLayout 设置 layout_scrpllFlag 属性,可以控制包含在CollapsingToolbarLayout 中的控件。

下面介绍下CollapsingToolBarLayout 的属性
  • app:title=”” ToolBar 的标题,当ToolBar 和 CollapsingToolBarLayout 同时设置了title后,以CollapsingToolBarLayout 的为准。
  • app:contentScrim=”?attr/colorPrimary” 当CollapsingToolBarLayout 被折叠后在最顶部显示的颜色。
  • app:expandedTitleGravity=”left|bottom” 当CollapsingToolBarLayout 完全展开后,title 所在的位置,默认的显示在左下角 left+bottom
  • app:collapsedTitleGravity=”left” 当CollapsingToolBarLayout 被折叠后title在顶部显示的位置,默认的显示在左边 。
  • app:layout_collapseMode=”pin” 注意:这是子视图的属性 表示子视图的折叠模式,有两个参数 1.”pin” 固定模式,在折叠的时候固定在顶端 2. “parallax” 视差模式,在折叠的过程中会有个视差折叠的效果。

好了,我们来看下使用CollapsingToolBarLayout 的效果

布局文件如下:

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout 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.AppBarLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">

        <android.support.design.widget.CollapsingToolbarLayout
            android:id="@+id/collapsingtoolbar"
            android:layout_width="match_parent"
            android:layout_height="250dp"
            app:collapsedTitleGravity="left"
            app:contentScrim="?attr/colorPrimary"
            app:expandedTitleGravity="left|bottom"
            app:layout_scrollFlags="scroll|exitUntilCollapsed">

            <ImageView
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:background="?attr/colorPrimary"
                android:scaleType="fitXY"
                android:src="@mipmap/timg" />

            <android.support.v7.widget.Toolbar
                android:id="@+id/toolbar"
                android:layout_width="match_parent"
                android:layout_height="?attr/actionBarSize"
                app:layout_collapseMode="pin" />
        </android.support.design.widget.CollapsingToolbarLayout>

        <android.support.design.widget.TabLayout
            android:id="@+id/tablayout"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:tabIndicatorColor="@color/select_color_000000"
            app:tabMode="fixed"
            app:tabSelectedTextColor="@color/select_color_000000"
            app:tabTextColor="@color/color_999999">

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

    <android.support.v4.view.ViewPager
        android:id="@+id/viewpager"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_behavior="@string/appbar_scrolling_view_behavior">

    </android.support.v4.view.ViewPager>

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

以上就实现了Toolbar 的折叠和隐藏,实际上CoordinatorLayout 最经典的设计 BeHavior 并没有详细讲到,我会在下一篇博客中更新 如何自定义的使用BeHavior。

最后附上源码的地址 https://github.com/smile-sxl/CoordinatorLayout

Android开发项目实战:实现折叠式布局(1) 由于篇幅限制,文档的详解资料太全面,细节内容太多,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!由于整个文档比较全面,内容比较多,篇幅不允许,下面以截图方式展示。网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。需要这份系统化学习资料的朋友,可以戳这里获取一个人可以走的很快,但一群人才能走的更远! 阅读详情

相关推荐

Android MaterialDesign系列之CoordinatorLayout实现折叠式菜单栏

一、简述 本文主要是对简易的折叠式菜单栏做个记录,方便以后开发进行比照改进。本文记录的有简单的Material化的折叠式菜单栏的实现,也将呈现一些比较重要的概念,比如 fitSystemWindows 的一些细节。 二、效果 三、使用 1、CoordinatorLayout CoordinatorLayout即为协调性布局,是一个加强版的FrameLayout,它可以协调子布局及控件...

crazyZhangxl的博客 2710

android内容页折叠,CoordinatorLayout页面折叠控件

简介CoordinatorLayout是一种嵌套滑动控件,结合AppbarLayout, CollapsingToolbarLayout等 可 产生各种炫酷的折叠悬浮效果。本文参考文章CoordinatorLayout 学习(一) - CoordinatorLayout的基本使用使用作为最上层的View作为一个 容器与一个或者多个子View进行交互AppBarLayout如果我们想要实现折叠的Ac...

weixin_35385462的博客 1058

AndroidUI——CoordinatorLayout与CollapsingToolbarLayout实现ToorBar折叠效果

可见区域的大小在移动设备中是非常重要的,有的时候我们在滑动list的时候,上方的ToolBar可以自动隐藏掉,从而使得下方的可见区域变大,提升用户体验,先看一下最终的效果: 我们一步一步来完成这个过程。 使用CoordinatorLayout来搞一个可以上滑出去的Toolbar xml代码还是用的前几个的结构,只需要改造部分属性就可以了。 将包裹的布局改为CoordinatorLayout 在To...

是谁叫我 546

【Android】折叠效果CoordinatorLayout+AppBarLayout首页效果&& CoordinatorLayout抖动问题解决方案--100个经典UI设计模板(95/100)

折叠滚动效果UI布局 CoordinatorLayout抖动问题解决

产品:SmartApi;服务:大前端++;其他技术分享 3336

Revit获取族预览图

最近做到和族库相关的功能需要获取到族文件的预览图,在RevitAPI中提供了ElementType.GetPreviewImage方法,但是前提就是你是在Revit里面操作的,并且已经拿到了Symbol对象实例,才可以调用此方法。然后在网上找了另外一种方式,通过读取Revit文件,在REVITPREVIEW4.0字段截取文件信息,将其转换为图片格式。 一、使用RevitAPI中ElementType.GetPreviewImage方法 [Autodesk.Revit.Attributes.Transac.

weixin_44631419的博客 1749

ESP32脑机接口开发板:EEG信号采集与应用开发指南

脑机接口(BCI)技术通过采集脑电图(EEG)信号实现人机交互,其核心在于高精度生物电信号采集与实时处理。基于ESP32微控制器的开发平台结合专业级ADS1299 ADC芯片,可构建8通道EEG信号采集系统,支持250SPS采样率与可编程增益。这种嵌入式解决方案在科研教育领域具有显著优势,既能满足信号质量要求,又大幅降低开发门槛。典型应用包括实时脑电波可视化、注意力检测等BCI场景,通过Python生态工具链(如BrainFlow、LSL)可快速实现数据处理。开发时需注意电极阻抗控制(<10kΩ)和50/6

weixin_42518874的博客 343

android隐藏toolbar,Android CoordinatorLayout的使用——实现Toolbar的隐藏和折叠

简单介绍下CoordinatorLayoutCoordinatorLayoutpublic class CoordinatorLayoutextends ViewGroup implements NestedScrollingParent2java.lang.Object↳ android.view.View↳ android.view.ViewGroup↳ android.support.des...

weixin_29240343的博客 959

【文章阅读+代码复现】Point-GNN

Brief 在3D点云语义分割方法中,GNN已经做了很多可用的方案,但是在目标检测上依旧是采用比较传统的CNN和稀疏卷积的组合,这一篇文章是研究了图卷积在3D检测的中的用法。来自卡内基梅隆大学。已经被CVPR2020接收. 这里是 paper 这里是 code Abstruct 一个采用GNN设计的3D目标检测框架 过程是先将点云场景编码成图结构,随后设计了一个叫point-GNN的网络结构,在...

有所为,有所成长 1万+

Android用CoordinatorLayout实现Toolbar隐藏和折叠

CoordinatorLayout是Android Design Support Library中提供的控件 效果图: 代码: ScrollingActivity中 package com.jremm.rolechina.coo; import android.os.Bundle; import android.support.design.widget.CollapsingTo...

翟浩浩Android专栏 1338

antiSMASH安装与使用

antiSMASH本地安装 简要: antiSMASH的本地安装需要安装很多的依赖包,本文章使用conda辅助安装 参考: 官方:https://docs.antismash.secondarymetabolites.org/install/ 文章:http://blog.sciencenet.cn/blog-3416913-1240614.html 依赖包下载 conda install -y diamond=0.8.36 conda install -y fasttree=2.1.9 conda ins

Curry_chenhu的博客 7222

【PPS便携式移动电源】如何透彻了解便携式移动电源,仅需要十分钟阅读即可

PPS 便携式储能电源的发展前景广阔,受益于户外经济爆发、应急备灾需求提升及 “双碳” 政策支持,全球市场规模预计持续增长,2025 年出货量将达 2380 万台,未来将向大功率大容量、光充一体化、智能化方向发展,还会拓展家庭储能、移动医疗等新场景,同时钠离子电池应用、双向逆变技术升级将进一步推动行业发展。

昔时扬尘处 272

Toolbar、CollapsingToolbarLayout、AppBarlayout、CoordinatorLayout的总结

本文参考了 https://www.jianshu.com/p/bbc703a0015e https://blog.youkuaiyun.com/mffandxx/article/details/69223021 一、只使用Toolbar、AppBarlayout、CoordinatorLayout的情况下 先贴上代码: <?xml version="1.0" encoding="utf-8"?>...

sinat_41938770的博客 287

cuRobo 入门教程(一)基于CUDA的机器人运动规划加速库

cuRobo是一款基于CUDA加速的机器人算法库,提供运动学计算、碰撞检测、轨迹优化等功能。该库采用并行优化技术,在GPU上实现高效运算,比现有方案快60倍。cuRobo支持多种机器人模型和环境表示,包含正向/逆向运动学、无碰撞轨迹生成、模型预测控制等核心算法,并可与IsaacSim等仿真平台集成。其特点包括:1) 支持多种碰撞检测方式(长方体/网格/深度图像);2) 提供批量环境处理和实时世界更新;3) 通过CUDA Graphs加速优化迭代;4) 在Jetson Orin等平台实现毫秒级运动规划。安装支

2506_90492529的博客 1924

CoordinatorLayout/AppbarLayout/CollapsingToolbarLayout的配合使用,Toolbar特效

上面这个特效就是Toolbar与CoordinatorLayout/AppbarLayout/CollapsingToolbarLayout配合后的效果;这几个View单独使用没什么效果,一般都是要互相配合才行。 简介 CoordinatorLayout: Coordinator的翻译后意思是【协调者】,它主要用于协调处理子View如何响应滚动事件,一般与NestedScrollView配合,协调子View滚动事件的处理 AppbarLayout:是一种支持响应滚动手势的App Bar布局,继承自Li..

guangdeshishe的博客 2705

LPDDR5 学习笔记01:功能概述

LPDDR5/LPDDR5X SDRAM设备采用8/16DQ通道架构,支持2Gb-32Gb容量。通过CK命令时钟和更快的WCK数据时钟协同工作,7个CA引脚传输控制信息,支持2:1或4:1的WCK:CK比例。设备提供BG/8B/16B三种存储模式选择,分别支持不同数据速率(最高8.533Gbps)和突发长度。采用0.5V VDDQ电源电压,实现高速双倍数据速率传输,并通过差分WCK时钟完成数据采样。读写采用突发访问机制,需先激活命令再执行读写操作。新型LPDDR5X仅支持BG和16B模式,优化了高速性能。

一只豌豆象的博客 2197

华为OD机试真题2026双机位C卷 C语言 实现【明日之星选举】

给定一组选票votes。votes[i]代表第 i 张选票的内容,包含一个字符串"zhangsan,hanmei",表示推荐zhangsan为明日之星,反对 hanmei 称为明日之星。赞成或反对使用逗号(,)分割。 给定一个数组n,表示最后将筛选出赞成票最多的n个人,如果赞成票相同,则反对票越少,排序越靠前;如果赞成票和反对票都相同,则按照姓名字典序升序排序。

MISAYAONE的博客 182

CoordinatorLayout的使用

官方文档中对CoordinatorLayout有如下的描述: CoordinatorLayout is a super-powered FrameLayout.CoordinatorLayout is intended for two primary use cases: As a top-level application deco...

weixin_33806914的博客 142

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Android初步进阶之Design Support Library库简单使用(二)

上接上一篇文章,继续介绍这个库的使用。 上一篇文章 使用NavigationView来实现抽屉菜单界面 上次也说了,我们费劲用Toolbar实现的抽屉式菜单,这不是又有一个封装好的组件吗,都是封装带师。废话不多说,做好就这样: 首先,我们在上一篇文章的基础上进行改造,修改主界面的布局文件main_activity.xml。 <?xml version="1.0" encoding="utf-8"?> <androidx.drawerlayout.widget.DrawerLayo

weixin_42514162的博客 363

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

CoordinatorLayout

此Demo为上一个Demo JYTabLayout的延伸。主要实现功能为ToolBar的隐藏和折叠。JYTabLayout 先上UI图(无图说个XX啊) AndroidUI HiddenToolBar FoldingToolBar 录屏的时候录屏软件渲染有问题,凑合着看吧。 此Demo是JYTabLayout的延伸,列表的展示等代码就不在细说。 配置build.gradle: de...

weixin_33851604的博客 138

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

上一篇: NavigationView 的使用
下一篇: Android 自定义Behavior
谦行
博客等级 码龄11年 182粉丝 35原创
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值