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


相关推荐: Laravel Asset编译怎么配置_Laravel Vite前端构建工具使用  DeepSeek是免费使用的吗 DeepSeek收费模式与Pro版本功能详解  Laravel怎么实现支付功能_Laravel集成支付宝微信支付  C语言设计一个闪闪的圣诞树  宙斯浏览器怎么屏蔽图片浏览 节省手机流量使用设置方法  js代码实现下拉菜单【推荐】  详解jQuery中基本的动画方法  Laravel Eloquent访问器与修改器是什么_Laravel Accessors & Mutators数据处理技巧  HTML5建模怎么导出为FBX格式_FBX格式兼容性及导出步骤【指南】  Linux系统命令中screen命令详解  微信小程序 闭包写法详细介绍  家族网站制作贴纸教程视频,用豆子做粘帖画怎么制作?  Win11怎么开启自动HDR画质_Windows11显示设置HDR选项  厦门模型网站设计制作公司,厦门航空飞机模型掉色怎么办?  如何在云主机上快速搭建多站点网站?  图册素材网站设计制作软件,图册的导出方式有几种?  在Oracle关闭情况下如何修改spfile的参数  Laravel怎么配置自定义表前缀_Laravel数据库迁移与Eloquent表名映射【步骤】  Laravel如何实现模型的全局作用域?(Global Scope示例)  Laravel如何生成PDF或Excel文件_Laravel文档导出工具与使用教程  PHP的CURL方法curl_setopt()函数案例介绍(抓取网页,POST数据)  html5audio标签播放结束怎么触发事件_onended回调方法【教程】  高端建站三要素:定制模板、企业官网与响应式设计优化  Laravel如何处理CORS跨域请求?(配置示例)  简单实现jsp分页  Laravel如何优雅地处理服务层_在Laravel中使用Service层和Repository层  PHP怎么接收前端传的文件路径_处理文件路径参数接收方法【汇总】  常州企业网站制作公司,全国继续教育网怎么登录?  个人摄影网站制作流程,摄影爱好者都去什么网站?  php 三元运算符实例详细介绍  如何实现javascript表单验证_正则表达式有哪些实用技巧  Laravel如何配置中间件Middleware_Laravel自定义中间件拦截请求与权限校验【步骤】  MySQL查询结果复制到新表的方法(更新、插入)  JS碰撞运动实现方法详解  Laravel Facade的原理是什么_深入理解Laravel门面及其工作机制  *服务器网站为何频现安全漏洞?  如何在浏览器中启用Flash_2025年继续使用Flash Player的方法【过时】  Laravel DB事务怎么使用_Laravel数据库事务回滚操作  米侠浏览器网页图片不显示怎么办 米侠图片加载修复  如何自定义safari浏览器工具栏?个性化设置safari浏览器界面教程【技巧】  如何用已有域名快速搭建网站?  Win11怎么修改DNS服务器 Win11设置DNS加速网络【指南】  Laravel如何使用Guzzle调用外部接口_Laravel发起HTTP请求与JSON数据解析【详解】  消息称 OpenAI 正研发的神秘硬件设备或为智能笔,富士康代工  Python自然语言搜索引擎项目教程_倒排索引查询优化案例  Laravel怎么创建控制器Controller_Laravel路由绑定与控制器逻辑编写【指南】  Microsoft Edge如何解决网页加载问题 Edge浏览器加载问题修复  如何用PHP工具快速搭建高效网站?  Laravel如何实现图片防盗链功能_Laravel中间件验证Referer来源请求【方案】  Laravel如何实现数据导出到CSV文件_Laravel原生流式输出大数据量CSV【方案】