码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 『Material Design』CollapsingToolbarLayout可折叠标题栏


    👨‍🎓作者简介:一位喜欢写作,计科专业大三菜鸟

    🏡个人主页:starry陆离

    如果文章有帮到你的话记得点赞👍+收藏💗支持一下哦

    CollapsingToolbarLayout可折叠标题栏

    • 1.可折叠标题栏
    • 2.布局设计
      • 标题部分
      • 内容部分
    • 3.代码部分
    • 4.充分利用系统状态栏
    • 5.参考资料
    • 6.Gitee源码

    1.可折叠标题栏

    可折叠标题栏需要借助CollapsingToolbarLayout这个工具。

    CollapsingToolbarLayout是一个作用于Toolbar基础之上的布局,由DesignSupport库提供。

    需要注意的是:

    • CollapsingToolbarLayout不能独立存在
    • 它在设计的时候就被限定只能作为AppBarLayout的直接子布局来使用。
    • 而AppBarLayout又必须是CoordinatorLayout的子布局;

    因此可以通过下面这个图直观的了解他们的层级关系。

    image-20221014183212863

    2.布局设计

    布局的设计分为

    • 标题部分
    • 内容部分

    标题部分

    首先我们来看标题部分,这里我们设计是完全遵循刚刚的规则的,最外层是CoordinatorLayout,中间是AppBarLayout,最里层是CollapsingToolbarLayout。并且我们制定了AppBarLayout的高度是250dp,因此只有上面的那小部分是蓝色的。

    在CollapsingToolbarLayout中有几个属性需要说明一下,分别是

    • contentScrim:指定CollapsingToolbarLayout趋于折叠状态的背景色
    • layout_scrollFlags:scroll表示CollapsingToolbarLayout会随着内容部分滚动一起滚动,exitUntilCollapsed表示CollapsingToolbarLayout完成折叠后保留在揭秘那上,不会移出屏幕。

    image-20221014184107813

    然后在CollapsingToolbarLayout放置一个背景图片和一个ToolBar。

    这里用到了layout_collapseMode属性

    • parallax:表示折叠的过程中产生一定的错位偏移
    • pin:表示折叠的过程中位置始终保持不变

    注意这里控件不要选错了哦,是androidx.appcompat.widget.Toolbar

    image-20221014195723661

    内容部分

    内容部分就简单了。由一个NestedScrollView嵌套一个LinearLayout,在LinearLayout中存放我们的内容。

    image-20221014185729321

    为了美化效果,在线性布局中,使用MaterialCardView,然后放置一个文本控件显示内容。

    image-20221014190213682

    至此布局部分编写完毕。

    3.代码部分

    代码部分比较简单,分别获取各个控件的实例,然后设置图片资源,文本资源即可。实际开发当然不是这么简单粗暴,这些数据应该从上一个界面获取,或者网络加载请求数据。

    除此之外我还通过setDisplayHomeAsUpEnabled()设置左上角的返回按钮显示。并用onOptionsItemSelected()方法监听返回事件

    getSupportActionBar().setDisplayHomeAsUpEnabled(true);//显示android.R.id.home
    
    • 1

    Ad_003image-20221014200458189

    4.充分利用系统状态栏

    让背景图和系统状态栏融合,需要借助Android:fitsSystemWindows这个属性来实现。

    将控件的android:fitsSystemWindows属性指定成true,就表示该控件会出现在系统状态栏里。现在我们要让图片出现在状态栏里,除了给ImageView设置Android:fitsSystemWindows属性,它的所有父控件均需要设置。

    image-20221014203334205

    除此之外我们还需要将状态栏设置为透明的。

    在themes文件中定义一款主题样式CollapseTheme,它继承自AppTheme中的所有特性,并在此基础上添加了状态栏颜色设置透明

    image-20221014203642971

    在AndroidManifest.xml中为CollapseActivity使用这款主题

    image-20221014203859621

    再来看一下效果,nice!!!

    Ad_003

    5.参考资料

    Material Design 实战 之 第六弹 —— 可折叠式标题栏(CollapsingToolbarLayout) & 系统差异型的功能实现(充分利用系统状态栏空间) - 简书 (jianshu.com)

    6.Gitee源码

    Android_Java_Review: 学习–代码即笔记 (gitee.com)

  • 相关阅读:
    Shiro去掉登录时url里的JSESSIONID,允许分号 中文参数
    【23真题】超难985!做完感觉没学过!
    MySQL事务/事务与数据库底层数据/多点回滚/隔离级别/悲观锁和乐观锁/锁模式和分类/相关锁总结/JDBC事务实现
    俄罗斯方块
    类图表示法
    应用在Wi-Fi音箱中的国产高性能DSP音频处理芯片
    ROS2与turtlebot4仿真入门教程-turtlebot4遥控
    SQL Server截取字符串函数操作
    如何使用helm优雅安装prometheus-operator,并监控k8s集群微服务
    ai语音电销机器人电销行业要怎么降低封号率?
  • 原文地址:https://blog.csdn.net/weixin_53463734/article/details/127660620
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号