Android 使用CoordinatorLayout实现滚动标题栏效果的实例
发布时间 - 2026-01-11 00:08:24 点击率:次在Material Design里,CoordinatorLayout通常用来作为顶层视图,来协调处理各个子View之间的动作,从而实现各种动画效果,如Snackbar与FloatingActionButton的配合显示效果,就是以CoordinatorLayout作为根布局来实现的

CoordinatorLayout提供Behaviors接口,子View通过实现Behaviors接口来协调和其它View之间的显示效果,可以这么理解:
CoordinatorLayout让其子View之间互相知道彼此的存在,任意一个子View的状态变化会通过Behaviors通知其它子View,CoordinatorLayout就像一个桥梁,连接不同的View,并使用Behavior处理各个子View之间的通信
效果一:
想实现这样的效果挺简单的,主要是在xml布局文件中进行设置
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto">
<!--包裹头部View实现滑动效果-->
<android.support.design.widget.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/ThemeOverlay.AppCompat">
<!--标题栏-->
<android.support.v7.widget.Toolbar
android:id="@+id/tb_toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:navigationIcon="@android:drawable/ic_dialog_email"
app:title="Title"
app:layout_scrollFlags="scroll" />
<!--Tab导航栏-->
<android.support.design.widget.TabLayout
android:id="@+id/tab_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:tabMode="fixed"
app:layout_scrollFlags="scroll|enterAlways"/>
</android.support.design.widget.AppBarLayout>
<android.support.v4.view.ViewPager
android:id="@+id/vp_tab_pager"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior"/>
</android.support.design.widget.CoordinatorLayout>
首先给被AppBarLayout包裹的View添加app:layout_scrollFlags属性,并设置相应的值
• scroll:让该View可以滚动出屏幕
• enterAlways:不需要滚动到顶部,只要有向上滚动的事件就显示该View
• enterAlwaysCollapsed:定义该View何时进入,如果你定义了一个最小高度minHeight,同时enterAlways也定义了,那么该View将会在到达这个最小高度的时候开始慢慢显示,直到滚动组件滚动到顶部时再完全展开
• exitUntilCollapsed:定义该View何时退出,如果你定义了一个最小高度minHeight,那么这个View将在滚动到达这个最小高度时消失
如果不设置layout_scrollFlags属性,那么该View就会固定在屏幕上
enterAlwaysCollapsed和exitUntilCollapsed属性主要是在搭配CollapsingToolbarLayout时使用的
注意:布局的时候,AppBarLayout里面滚动的View要放在固定的View上面
然后在CoordinatorLayout布局里放一个可以滚动的View(不支持ListView),这里使用ViewPager里放置一个RecylerView,为该ViewPager设置app:layout_behavior属性,这里可直接使用Android自带的值
app:layout_behavior=”@string/appbar_scrolling_view_behavior”
设置该值的作用相当于告诉CoordinatorLayout,此View是一个滚动控件,如果该View滚动了,那么设置了layout_scrollFlags属性的控件就可以响应滚动事件了
想实现效果一,总结
使用CoordinatorLayout作为根布局
使用AppBarLayout包裹头部View,并给需要滚动的View设置app:layout_scrollFlags属性
给滑动组件设置app:layout_behavior属性
效果二:
想实现这个效果,需要使用到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="300dp"
android:fitsSystemWindows="true"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
<android.support.design.widget.CollapsingToolbarLayout
android:id="@+id/collapsing_toolbar"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:contentScrim="?attr/colorPrimary"
app:expandedTitleMarginEnd="88dp"
app:expandedTitleMarginStart="66dp"
app:layout_scrollFlags="scroll|exitUntilCollapsed">
<!--拉开后显示的背景图片-->
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="centerCrop"
android:src="@drawable/bg_image"
app:layout_collapseMode="pin"/>
<!--标题栏-->
<android.support.v7.widget.Toolbar
android:id="@+id/tb_toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
app:layout_collapseMode="pin"
app:navigationIcon="@android:drawable/ic_dialog_email"
app:title="Title"/>
</android.support.design.widget.CollapsingToolbarLayout>
</android.support.design.widget.AppBarLayout>
<android.support.v7.widget.RecyclerView
android:id="@+id/rv_data"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior"/>
</android.support.design.widget.CoordinatorLayout>
一些属性的作用
• title:设置Toolbar的标题,注意:如果在CollapsingToolbarLayout中指定了title属性,那么Toolbar中的title属性将会变得无效
• expandedTitleMarginStart:设置下拉伸缩完成后,ToolBar标题文字左边的margin距离
• expandedTitleMarginEnd:设置下拉伸缩完成后,Toolbar标题文字右边的margin距离
• contentScrim:设置Toolbar折叠到顶部后的背景
• layout_collapseMode:折叠效果,有两个值,pin代表从底部拉出,parallax代表从中间展开
看文字可能不太理解collapseMode的显示效果,两个值的具体显示效果如下:
pin:
parallax:
想实现效果二,总结
首先我们设置一个固定的高度给AppBarLayout
然后给AppBarLayout的子View包裹了一层CollapsingToolbarLayout,并设置CollapsingToolbarLayout的滚动属性为scroll|exitUntilCollapsed
最后再为CollapsingToolbarLayout里的子View设置layout_collapseMode属性,指定其展示效果
以上这篇Android 使用CoordinatorLayout实现滚动标题栏效果的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
# coordinatorlayout实现滚动标题栏
# Android中自定义标题栏样式的两种方法
# 3种Android隐藏顶部状态栏及标题栏的方法
# Android自定义状态栏颜色与应用标题栏颜色一致
# Android 顶部标题栏随滑动时的渐变隐藏和渐变显示效果
# Android中去掉标题栏的几种方法(三种)
# Android 全屏无标题栏的三种实现方法
# Android中隐藏标题栏和状态栏的方法
# Android ScrollView滑动实现仿QQ空间标题栏渐变
# Android中隐藏状态栏和标题栏的方法汇总(隐藏状态栏、标题栏的五种方法)
# Android实现可折叠式标题栏
# 显示效果
# 如果你
# 是在
# 标题栏
# 给大家
# 拉出
# 是一个
# 就会
# 完成后
# 放在
# 就像
# 将会
# 将在
# 不太
# 不需要
# 基础上
# 会在
# 希望能
# 不支持
# 这篇
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
怎么制作网站设计模板图片,有电商商品详情页面的免费模板素材网站推荐吗?
如何在浏览器中启用Flash_2025年继续使用Flash Player的方法【过时】
如何快速搭建支持数据库操作的智能建站平台?
矢量图网站制作软件,用千图网的一张矢量图做公司app首页,该网站并未说明版权等问题,这样做算不算侵权?应该如何解决?
制作公司内部网站有哪些,内网如何建网站?
免费视频制作网站,更新又快又好的免费电影网站?
三星网站视频制作教程下载,三星w23网页如何全屏?
如何在 Go 中优雅地映射具有动态字段的 JSON 对象到结构体
企业在线网站设计制作流程,想建设一个属于自己的企业网站,该如何去做?
Laravel表单请求验证类怎么用_Laravel Form Request分离验证逻辑教程
Laravel怎么实现验证码(Captcha)功能
Laravel观察者模式如何使用_Laravel Model Observer配置
Laravel中间件如何使用_Laravel自定义中间件实现权限控制
如何在万网主机上快速搭建网站?
音乐网站服务器如何优化API响应速度?
焦点电影公司作品,电影焦点结局是什么?
EditPlus中的正则表达式 实战(4)
Laravel如何配置和使用队列处理异步任务_Laravel队列驱动与任务分发实例
公司网站制作价格怎么算,公司办个官网需要多少钱?
html5源代码发行怎么设置权限_访问权限控制方法与实践【指南】
简历在线制作网站免费版,如何创建个人简历?
详解Android中Activity的四大启动模式实验简述
Laravel如何实现文件上传和存储?(本地与S3配置)
,南京靠谱的征婚网站?
如何快速配置高效服务器建站软件?
Laravel安装步骤详细教程_Laravel环境搭建指南
Laravel Seeder填充数据教程_Laravel模型工厂Factory使用
在线制作视频网站免费,都有哪些好的动漫网站?
香港服务器部署网站为何提示未备案?
Laravel项目如何进行性能优化_Laravel应用性能分析与优化技巧大全
Laravel如何实现数据库事务?(DB Facade示例)
实现点击下箭头变上箭头来回切换的两种方法【推荐】
linux top下的 minerd 木马清除方法
HTML5空格和nbsp有啥关系_nbsp的作用及使用场景【说明】
jquery插件bootstrapValidator表单验证详解
香港服务器网站测试全流程:性能评估、SEO加载与移动适配优化
Laravel如何使用缓存系统提升性能_Laravel缓存驱动和应用优化方案
Laravel如何实现图片防盗链功能_Laravel中间件验证Referer来源请求【方案】
详解Nginx + Tomcat 反向代理 负载均衡 集群 部署指南
如何在IIS中配置站点IP、端口及主机头?
Laravel中的Facade(门面)到底是什么原理
如何快速上传建站程序避免常见错误?
悟空浏览器如何设置小说背景色_悟空浏览器背景色设置【方法】
JavaScript实现Fly Bird小游戏
什么是javascript作用域_全局和局部作用域有什么区别?
JavaScript如何操作视频_媒体API怎么控制播放
如何在服务器上配置二级域名建站?
Laravel如何使用Service Container和依赖注入?(代码示例)
Laravel如何处理和验证JSON类型的数据库字段
详解jQuery中基本的动画方法

