CollapsingToolbarLayout用法详解(简洁易懂)

2023-11-13

Collapsing翻译过来就是折叠的意思。
CollapsingToolbarLayout:顾名思义就是可折叠的toolbar布局。

先看一下使用它的效果:
CollapsingToolbarLayout

可以看到有这样几个效果:

1、背景图片渐渐消失变为主题颜色
2、FloatingActionButton在滑到顶部的时候消失了
3、左上角的箭头保持不动
4、title在滑到顶部的时候自动调整位置和大小

CollapsingToolbarLayout就是这样一个把各种toolbar的效果组合起来的布局,它可以实现toolbar的折叠效果。

要实现这样的效果还需要CoordinatorLayout+AppBarLayout的配合。

布局文件:
activity_main.xml :

<?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"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
 >
    <android.support.design.widget.AppBarLayout
        android:id="@+id/appbar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"    android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">

        <android.support.design.widget.CollapsingToolbarLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:contentScrim="?attr/colorPrimary"
            app:expandedTitleMarginEnd="60dp"
            app:expandedTitleMarginStart="48dp"
            app:layout_scrollFlags="scroll|exitUntilCollapsed">

            <ImageView
                android:id="@+id/main.backdrop"
                android:layout_width="wrap_content"
                android:layout_height="300dp"
                android:scaleType="centerCrop"
                android:src="@drawable/material_img"

                app:layout_collapseMode="pin"
                app:layout_collapseParallaxMultiplier="0.5" />

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

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


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

    <android.support.v4.widget.NestedScrollView

        android:layout_width="match_parent"
        android:layout_height="wrap_content"

        app:layout_behavior="@string/appbar_scrolling_view_behavior">

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="@string/my_txt"
            android:textSize="20sp" />

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

    <android.support.design.widget.FloatingActionButton
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginRight="10dp"
        app:layout_anchor="@id/appbar"
        app:layout_anchorGravity="end|bottom|right" />
</android.support.design.widget.CoordinatorLayout>

关键词:

CoordinatorLayout:

Coordinator : 协调。
协调(Coordinate)其他组件, 实现联动的布局。只有最外层是这个布局,一些滚动行为的参数才能使用。

AppBarLayout:

AppBarLayout会将它内部的所有控件组合成一个toolbar,它继承自LinearLayout,布局方向为垂直方向。它可以设置当某个可滚动View的滚动手势发生变化时,其内部的子View如何动作。

CollapsingToolbarLayout:

实现可折叠toolbar的布局。通过设置一些属性实现可折叠的toolbar。

Toolbar:完美代替actionbar的新控件。
NestedScrollView

Nested:嵌套
NestedScrollView代替了ScrollView。它符合MD设计风格,并且能更好的和其它新控件配合。它自己布局内的子View滚动的时候会自动触发CoordinatorLayout中设置的ToolBar的滑入滑出。

FloatingActionButton

浮动按钮

关键属性:

contentScrim :

当CollapsingToolbarLayout完全折叠后的背景颜色。
通常设置为:app:contentScrim=”?attr/colorPrimary”,这样当CollapsingToolbarLayout完全折叠后就会显示主题颜色。

expandedTitleMarginStart :

布局张开的时候title与左边的距离,如图:
expandedTitleMarginStart

layout_scrollFlags:

设置滚动表现:
1、 Scroll, 表示手指向上滑动的时候,CollapsingToolbarLayout也会向上滚出屏幕并且消失,这个属性必须要有。
2、 exitUntilCollapsed, 表示这个layout会一直滚动离开屏幕范围,直到它收折成它的最小高度.

如图:

有exitUntilCollapsed属性

最后会固定在头部

exitUntilCollapsed

没有exitUntilCollapsed 属性:

最后会滑出去
exitUntilCollapsed

3、enterAlways: 一旦手指向下滑动这个view就可见。

4、enterAlwaysCollapsed:
这个flag定义的是已经消失之后何时再次显示。假设你定义了一个最小高度(minHeight)同时enterAlways也定义了, 那么view将在到达 这个最小高度的时候开始显示,并且从这个时候开始慢慢展开,当滚动到顶部的时候展开完。

ImageView及Toolbar中的属性:

layout_collapseMode=””
1、 pin
在view折叠的时候Toolbar仍然被固定在屏幕的顶部。

2、 parallax
设置为这个模式时,在内容滚动时,CollapsingToolbarLayout中的View(比如ImageView)也可以同时滚动,实现视差滚动效果, 通常和layout_collapseParallaxMultiplier(设置视差因子,值为0~1)搭配使用。

parallax:视差
toolbar设置parallax: 注意看左上角的箭头,它会滑出头布局

parallax

toolbar设置pin:注意看左上角的箭头,它会固定在头布局

parallax

我们再看看
layout_collapseParallaxMultiplier的影响

layout_collapseParallaxMultiplier=0.8

layout_collapseParallaxMultiplier

layout_collapseParallaxMultiplier=0.3
layout_collapseParallaxMultiplier

可以看到给layout_collapseParallaxMultiplier设置的值越大可以让滚动的效果更加明显。

FloatingActionButton的属性

app:layout_anchor=”@id/appbar”
app:layout_anchorGravity=”end|bottom|right”

anchor: 锚

app:layout_anchor
设置这个属性可以让FloatingActionButton以某一个控件为基准调整位置,我们这里设置这个控件就是appbar

app:layout_anchorGravity
设置基于appbar控件的位置,我们这里设置了end|bottom|right

这样两行代码就可以将FloatingActionButton设置在appbar的右下角,并且行为会和appbar的滚动行为协作。

app:layout_anchorGravity

另外需要注意的是Toolbar的title需要在代码里设置:

Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        toolbar.setTitle("HD TEST");
        toolbar.setNavigationIcon(R.drawable.back);
        setSupportActionBar(toolbar);

代码下载:

CollapsingToolbarLayout的使用 - 下载频道 - CSDN.NET
http://download.csdn.net/detail/baidu_31093133/9652868

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CollapsingToolbarLayout用法详解(简洁易懂) 的相关文章

  • 工具栏外观中的 extjs 按钮

    嘿 我确实有一个小问题 但我似乎无法找到答案 当我在 extjs 工具栏中放置一个按钮时 它会以默认外观出现 就像任何 Windows 工具栏选项一样 我如何使它看起来像表单中的按钮 尝试这样 tbar xtype button text
  • 如何将导航抽屉放在工具栏下方?

    我的导航抽屉位于工具栏上方 我还添加了一些 xml 代码 请帮助我 这是我的 Activity xml
  • Eclipse Kepler RCP 主工具栏操作

    Google is我最好的朋友 但我得到的信息太分散而且很不清楚 没有简明的教程来描述我的需求 我想向我的 RCP 应用程序的主工具栏添加操作 但我需要彻底解释执行此操作的每种方法 但由于这是 StackOverflow 我会立即写下这些问
  • 如何使用代码在Python中删除Mayavi工具栏

    我有几个 Mayavi 图 我将它们组合在一个窗口中 沿着文档 如果我能去掉所有工具栏就更好了 虽然可以右键单击每个工具栏以使它们消失 但我想对它们进行编码以使其消失 像这样的命令scene hide toolbar 将是理想的 我在 Tr
  • 如果操作栏/工具栏为白色,菜单项上不会出现波纹

    我有白色工具栏 其中菜单项显示为操作 该操作是来自材质图标的黑色矢量资源 单击菜单项时没有波纹效果 因为波纹效果也是白色的 如果工具栏背景更改为其他颜色 例如蓝色 则会出现波纹 如何更改菜单项波纹颜色 使其在白色背景上可见 我试图改变颜色控
  • 如何让我的 Firefox 扩展工具栏按钮自动显示?

    我创建了一个由工具栏按钮组成的 Firefox 扩展 如何进行设置 以便在安装扩展程序时 该按钮自动出现在主工具栏中 我不希望我的用户必须转到自定义工具栏菜单并将我的按钮拖过来 From https developer mozilla or
  • 如何向 Xamarin.Forms ToolbarItem 添加菜单?

    我正在寻找一种向 ToolbarItem 添加菜单的方法 现在它只是可点击的文本 这是我试图创建的示例 这是我到目前为止所拥有的
  • 可以在工具栏中添加图像视图吗?

    我需要有关的信息Toolbar 我想在我的中添加四张图片Toolbar例如主页 新闻 搜索和消息 所以我把Imageview是在Toolbar 现在我不知道如何在这些图像上添加侦听器 我该怎么做 我还有一个导航抽屉 我想要它 如果你按Ima
  • 无法更改工具栏的颜色

    谁能解释一下 为什么我的工具栏没有改变它的颜色 即使我创建了另一种样式 例如 将其添加到我的清单文件中 例如
  • 如何像 Wysiwyg 中那样在 Quill 中添加“显示 html”按钮?

    我最近发现了 Quill 文本编辑器 因为我正在使用 php 和 javascript 中的新东西 所以我决定在我的应用程序中使用它而不是 Wysiwyg Quill 文档确实非常简约 如何添加允许用户显示和编辑当前 html 的按钮 我是
  • 如何使 ImageView 在工具栏中居中?

    一直试图将徽标放在我的工具栏中居中 当我导航到下一个活动时 会出现 向上可供性 图标 它将我的徽标稍微向右推 如何将我的徽标保留在工具栏的中心 而不删除向上的可供性图标 这是我的工具栏标签
  • 如何自定义 Eclipse 工具栏(Kepler 或一般工具栏)

    我尝试自定义 Eclipse Kepler JavaEE 中的工具栏已经有一段时间了 最终在给定透视图 例如 主 JavaEE 透视图 中按照我想要的方式配置工具栏后 当我切换到不同的透视图 例如 调试透视图 然后再切换回来时 它完全混乱了
  • 如何通知其他应用程序我的应用程序是 Windows 桌面的一部分?

    我想在 C 中为 Windows 创建一个 工具栏 并希望将其放置在 Windows 桌面的顶部空间 我希望其他 Windows 程序无法覆盖我的应用程序 我还希望其他应用程序将我的窗口视为桌面的一部分 以便当它们最大化时 您仍然可以看到我
  • jQgrid 工具栏搜索 - 从任何列动态删除搜索框

    我正在使用 jqgrid 版本 4 4 4 现在我面临一个与工具栏搜索相关的问题 正如我在标题中提到的 我想从任何列中删除工具栏搜索的搜索框 动态地 在渲染网格期间或之后 我用谷歌搜索 但没有找到关于我的这个问题的任何相关解决方案 我用了s
  • 如何在 swiftUI 生命周期中为三列视图添加工具栏分隔符

    我正在寻找一种方法来实现像 Mail app 这样的三列布局的工具栏 此外 Notes app 使用几乎相同的工具栏 两个应用程序之间唯一重要的区别是 Notes app 看起来像WindowStyle is a HiddenTitleBa
  • params.getBehaviour() 返回空值

    我正在玩新的 Android 设计库 CollapsingToolbarLayout 工作得很好 但是 我无法将工具栏的默认状态设置为 折叠 我正在尝试实施所示的解决方案here https stackoverflow com questi
  • Android 材料设计复制工具栏面包屑示例

    我正在尝试复制面包屑示例 我已经将 TextView 添加到工具栏 但无法完全复制工具栏样式的字体 大小 颜色 并且无法让面包屑从屏幕左侧浮动 您将需要创建自己的面包屑视图并将其添加到工具栏中 也许基于现在已弃用的碎片面包屑 https d
  • 如何解锁 Eclipse 4.2 (Juno) 中的工具栏

    我从 Eclipse Indigo 3 7 迁移到 Juno 4 2 在 Juno 中 所有工具栏似乎都被永久锁定 有没有办法解锁它们以便可以移动或重新排列它们 尝试 Windows 首选项 外观 看打印 然后在搜索框中输入 主题 或转到
  • 工具栏不适用于使用 appcompat v7 的棒棒糖之前的设备

    我正在使用材质 appcompat v7 为工具栏和菜单抽屉编写简单的代码 一切在 Nexus 5 上与棒棒糖完美配合 但在棒棒糖之前的版本 4 1 或 4 4 中设备会崩溃 问题在于定义风格 如果有人能告诉我问题出在哪里 我就把我的代码贴
  • 在工具栏下显示内容

    您好 我试图简单地将我的内容放在工具栏下方 但是当我运行我的应用程序时 某些内容本应位于工具栏下方 却隐藏在工具栏后面 我已经阅读了有关使用框架布局来尝试将其分离的内容 但我有点卡住了 我目前正在使用该软件提供的基本 android stu

随机推荐

  • python接收易语言数据中文乱码

    易语言代码 book name 发送到发 txt 提交信息 引号 book name 引号 引号 编辑框 下载 内容 引号 到文本 网页 访问 对象 http 127 0 0 1 8000 download 1 提交信息 Content T
  • bootstrap click事件自动刷新页面问题

    1 将按钮的type类型改为button
  • Linux线程编程

    参考 Linux多线程编程初探 作者 峰子 仰望阳光 网址 https www cnblogs com xiehongfeng100 p 4620852 html 目录 线程概述 线程概念 线程与进程区别 为何用线程 线程开发api概要 线
  • 存储过程与控制结构

    存储过程与函数的区别 存储过程是没有返回值的函数 函数是有返回值的存储过程 创建存储过程 delimiter create procedure procedureName begin sql 语句 end delimiter 查看已有存储过
  • VUE.js

    VUE 1 1 概述 Vue 是一套前端框架 免除原生JavaScript中的DOM操作 简化书写 之前也学习过后端的框架 Mybatis Mybatis 是用来简化 jdbc 代码编写的 而 VUE 是前端的框架 是用来简化 JavaSc
  • STM32(HAL库)驱动st7789LCD屏幕(7引脚240*240)

    目录 1 简介 2 CubeMX初始化配置 2 1 基础配置 2 1 1 SYS配置 2 1 2 RCC配置 2 2 屏幕引脚配置 2 3 项目生成 3 KEIL端程序整合 3 1 LCD驱动添加 3 2 函数修改 3 2 1 lcd h修
  • pyqt5_tools下找不到designer.exe的问题

    pyqt tools 5 15 版本 designer exe在路径 Lib site packages qt5 applications Qt bin下
  • 第11讲:vue脚手架集成ElementUI

    一 创建vue路由项目并添加ElementUI支持 ElementUI官方网站 ElementUI组件 创建路由项目请参考 路由开发 使用如下命令集成ElementUI npm i element ui S 在src main js文件中引
  • MySQL日期函数

    MySQL日期函数 1 adddate 语法 adddate date interval expr unit 或 adddate expr days 用于给时间类型增加时间间隔 默认为天 unit year month day day ho
  • STM32 USB CDC VPC

    STM32 USB CDC VPC 关键字 STM32 STM32CubeMX HAL库 USB 虚拟串口 串口不定长接收 1 简介 通过使用stm32cubemx 实现USB CDC虚拟串口 并与硬件串口进行数据传输 实现了硬件串口数据的
  • 手机怎么访问服务器未响应,手机设置路由器服务器未响应怎么办

    手机设置路由器服务器未响应怎么办 内容精选 换一换 自定义线路解析 支持DNS根据访问者的IP地址返回特定的IP地址 如果访问者所属Local DNS不支持扩展DNS机制 Extension Mechanisms for DNS EDNS
  • 将数组作为参数进行传递(转)

    有两种传递方法 一种是function int a 另一种是function int a 这两种两种方法在函数中对数组参数的修改都会影响到实参本身的值 对于第一种 根据之前所学 形参是实参的一份拷贝 是局部变量 但是数组是个例外 因为数组的
  • MySQL5.7_空间数据操作

    MySQL5 7 空间数据操作 创建数据库 空间数据库 spatialDB进行测试 USE spatialDB DROP TABLE t point CREATE TABLE t point id int 11 NOT NULL AUTO
  • 论文阅读笔记(四十七):Attention Is All You Need

    Abstract The dominant sequence transduction models are based on complex recurrent or convolutional neural networks that
  • 将python程序文件隐藏源码(windows下转换成.pyd)

    将编写好的Python程序给别人调用 隐藏源码步骤 1 安装Cython库 pip install Cython 2 新建一个转换程序Change py 内容如下 import Cython Build import distutils c
  • 【深入QT】信号槽机制浅析

    一 信号槽的基本概念 关于QT信号槽的基本概念大家都懂 通过信号槽机制 QT使对象间的通信变得非常简单 A对象声明信号 signal B对象实现与之参数相匹配的槽 slot 通过调用connect进行连接 合适的时机A对象使用emit把信号
  • 【PHP代码审计】ThinkPHP代码审计

    目录 0x001 开发方式 0x002 审计流程 1 启用调试开关 2 版本查看 3 定位函数 4 测试是否存在漏洞 5 版本自身漏洞 0x001 开发方式 在审计源码时根据不同的开发方式对应不同的审计方法 自写 有的站点虽然使用了thin
  • 数组对象and字符串对象

    一 数组对象 JavaScript中的数组对象可以使用new Array 或字面量 来创建 在创建以后 就可以调用数组对象提供的一些方法来实现对数组的操作 1 1数组类型检测 数组类型检测有两种常用的方式 分别是使用 instanceof
  • source insight 绿色护眼主题&暗色护眼主题

    效果如下 绿色背景颜色为RGB 195 222 204 主题下载地址 链接 https pan baidu com s 1aSkQOo70nr498hf wHN4Jw 提取码 f3f6 来自百度网盘超级会员V5的分享
  • CollapsingToolbarLayout用法详解(简洁易懂)

    Collapsing翻译过来就是折叠的意思 CollapsingToolbarLayout 顾名思义就是可折叠的toolbar布局 先看一下使用它的效果 可以看到有这样几个效果 1 背景图片渐渐消失变为主题颜色 2 FloatingActi