Material Design 中 CoordinatorLayout 概述及实现方式详解

前言

Material Design 是 Google 推出的一种全新的设计语言,旨在为移动端和 Web 应用程序带来一致性的设计风格和用户体验。其中 CoordinatorLayout 是 Material Design 中重要的 UI 控件之一,它可以与其他控件配合使用,实现各种丰富的效果,并且可适配不同的移动设备。

概述

CoordinatorLayout 是一种专门用来协调其他控件并提供交互反馈的布局容器,它的主要作用在于控制子视图之间的行为,例如在滚动时,一个视图可以跟随着另一个视图一起滚动,或者把一个视图固定在屏幕的某个位置等等。

实现方式

CoordinatorLayout 布局结构介绍:

CoordinatorLayout 包含一个或者多个子视图(View), 这些子视图可以是任何布局。在 CoordinatorLayout 布局内,每个子视图(称之为 Behavior View)可以使用 CoordinatorLayout.Behavior 实现特定的交互效果,这些效果包括:浮动动作按钮、拉伸式头部等效果。

这里我们以 FloatingActionButton(浮动动作按钮) 为例来说明:

----------------------------------------------------
      -----------------------------------------
      -----------------------------------
      -------------------------------------

      ------------------------------------------
          --------------------------------
          -----------------------------------
          --------------------------------------

      ----------------------------------------------------------------------
          --------------------------
          -----------------------------------
          ------------------------------------
          ----------------------------
          ------------------------------         
          -------------------------------------
          ----------------------------------------


------------------------------------------------------

在这个布局中,RecyclerView 作为一个列表的容器,浮动按钮 FloatingActionButton 指定了其在 CoordinatorLayout 中的位置关系,通过android.support.design.widget.CoordinatorLayout.LayoutParams 这样一个自定义属性布局可以达到效果

-------------------------------------
--------------------------------------
  • app:layout_anchor:是指定子视图的“锚点”。
  • app:layout_anchorGravity:是指定子视图的重心(重心是指水平和竖直方向上的对齐方式)。

Behavior 实现方式

CoordinatorLayout.Behavior 类是负责实现视图交互的类。只需要实现 Behavior 类,然后协调它与相应的视图进行配对即可,例如,FloatingActionButton 的效果是随着 RecyclerView 的滚动而上下浮动。

------ ----- ---------------------- ------- ----------------------------- -

    ------ ------------------------------ -------- ------------ ------ -
        -------------- -------
    -

    ---------
    ------ ------- ------------------------------------- ------- -------------------- ------
                                       ---- ------------------ ---- ------- --- ----------------- -
        ------ ---------------- -- ------------------------------- --
                --------------------------------- ------ ------------------ ------- ------------------
    -

    ---------
    ------ ---- -------------------------------- ------------------ -------------------- ------
                               ---- ------- --- ----------- --- -----------
                               --- ------------- --- ------------- -
        --------------------------------------- ------ ------- ----------- ----------- ------------- --------------

        -- ----------- - - -- --------------------- -- ------------- -
            -------------
        - ---- -- ----------- - - -- --------------------- -- ------------- -
            -------------
        -
    -
-

在代码中我们通过继承 Behavior 类,并重写 onNestedScroll() 方法,该方法在滑动时被调用 。我们判断滑动方向,当向上滑动时悬浮按钮隐藏,向下时悬浮按钮显示。

在布局 xml 文件中,我们需要指定该 Behavior类,在 FloatingActionButton 的属性中添加 android:layout_behavior 属性

---------------------------------------------

总结

CoordinatorLayout 可以灵活地布局子视图,为 Material Design UI 控件提供了优异的支持。我们可以通过使用 CoordinatorLayout.Behavior 实现个性化的视图交互效果,来满足不同应用场景的需求。了解和掌握这些技能,对于前端开发来说将有很大的指导意义。

完整代码如下:

------ ----- ---------------------- ------- ----------------------------- -

    ------ ------------------------------ -------- ------------ ------ -
        -------------- -------
    -

    ---------
    ------ ------- ------------------------------------- ------- -------------------- ------
                                       ---- ------------------ ---- ------- --- ----------------- -
        ------ ---------------- -- ------------------------------- --
                --------------------------------- ------ ------------------ ------- ------------------
    -

    ---------
    ------ ---- -------------------------------- ------------------ -------------------- ------
                               ---- ------- --- ----------- --- -----------
                               --- ------------- --- ------------- -
        --------------------------------------- ------ ------- ----------- ----------- ------------- --------------

        -- ----------- - - -- --------------------- -- ------------- -
            -------------
        - ---- -- ----------- - - -- --------------------- -- ------------- -
            -------------
        -
    -
-


----- ------------- ------------------
----------------------------------------------------
      ----------------------------------------------------------
      ---------------------------------------------------
      -----------------------------------------
      -----------------------------------
      -------------------------------------

      ------------------------------------------
          --------------------------------
          -----------------------------------
          --------------------------------------

      ----------------------------------------------------------------------
          --------------------------
          -----------------------------------
          ------------------------------------
          ----------------------------
          ------------------------------
          -------------------------------------
          --------------------------------------
          -----------------------------------------------

------------------------------------------------------

来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/65a2181fadd4f0e0ffa28ac5


猜你喜欢

  • CSS Reset 制作模板效果及代码实现

    在前端开发中,经常需要处理浏览器间的兼容性问题,其中之一便是不同浏览器对 CSS 样式的渲染存在差异,这时候 CSS Reset 便可以派上用场。在本文中,我们将深入探讨 CSS Reset 的实现原...

    9 个月前
  • 如何在 Vue.js 中使用 HTTP 拦截器技术

    在 Vue.js 中使用 HTTP 拦截器技术可以方便地对请求进行统一处理,比如添加全局请求头、处理异常情况等。本篇文章将详细介绍如何在 Vue.js 中使用 HTTP 拦截器技术,让前端开发者能够更...

    9 个月前
  • 教你如何在 Node.js 中使用 HTTPS 模块

    简介 HTTPS 是一个在网络传输中加密数据的协议,用于保护敏感信息的传输安全。在前端开发中,很多场景中需要使用到 HTTPS 来保护数据的安全性。下面我们就来介绍如何在 Node.js 中使用 HT...

    9 个月前
  • 遇到 Next.js 页面打包后体积过大怎么办?

    遇到 Next.js 页面打包后体积过大怎么办? Next.js 是一个基于 React 的轻量级框架,可以方便地搭建 SSR 应用。在开发过程中,我们经常会遇到页面打包后体积过大的问题,而这个问题尤...

    9 个月前
  • Redux 数据流程与应用状态的维护技巧

    什么是 Redux Redux 是一种 JavaScript 应用程序的状态容器,它可以管理应用程序的状态并控制它们是如何被处理的。Redux 非常适合于大型应用程序,因为它可以帮助开发者更好地组织和...

    9 个月前
  • Mongoose:如何获取或返回两个 date 时间之间的所有日期

    Mongoose:如何获取或返回两个 date 时间之间的所有日期 在前端开发过程中,日期时间经常会用到。有时候需要获取或者返回两个 date 时间之间的所有日期,这个场景在开发中也是比较常见的。

    9 个月前
  • Cherrypy 内置 Server-sent 事件的使用方法及其优点

    在前端开发中,实时性数据的展示一直是一个重要的需求,即使是如今的单页面应用也不能避免。为了提供实时数据变化的展示,传统的做法是长轮询或者 Websocket,但是这两种方式都有自己的弊端。

    9 个月前
  • 使用 TailwindCSS 创建响应式图像

    当今的 Web 开发中,响应式设计是必不可少的。而响应式图像是其中一个非常重要的方面。在本文中,我们将学习如何使用 TailwindCSS 来创建响应式图像。 TailwindCSS 简介 Tailw...

    9 个月前
  • 如何解决 Cypress 测试时存在的跨域问题

    在进行前端自动化测试时,我们可能会用到 Cypress 这个工具。但是,在使用 Cypress 进行测试时,由于浏览器的同源策略,会出现一些跨域问题,这会导致我们的测试用例无法正确运行,影响测试结果。

    9 个月前
  • webpack 如何提高页面加载速度?

    在现代前端开发中,Webpack 是一个非常流行的打包工具,它可以将各种资源文件打包成一个或多个文件,并优化这些文件的大小和加载顺序,从而提高页面的加载速度。本文将会介绍如何使用 Webpack 来提...

    9 个月前
  • 使用无障碍 API:如何在应用中控制焦点顺序

    在设计应用程序时,为了让所有用户都能够访问、浏览和使用它们,我们需要考虑到无障碍性(Accessibility)。无障碍 API 是一种用于开发无障碍应用程序的 API,它允许开发人员控制应用中焦点的...

    9 个月前
  • 深入理解 Java 虚拟机性能优化

    Java 虚拟机(Java Virtual Machine,简称 JVM)是 Java 语言的核心,它是 Java 程序运行的基础。在开发 Java 应用程序时,JVM 的性能优化是必不可少的环节。

    9 个月前
  • PWA 落地时的坑及解决方法总结

    前言 PWA(Progressive Web Apps),中文名为“渐进式 Web 应用”,是一种可以像原生应用一样运行的 Web 应用程序。其主要特点是具备离线缓存、消息推送、本地存储等诸多优点,使...

    9 个月前
  • Node.js 开始尝试实现 Promise/A

    什么是 Promise Promise 是一种异步编程的解决方案,它可以更优雅地处理异步函数的执行结果。Promise 可以在异步函数的回调函数中返回一个对象,代表这个异步操作的未来结果。

    9 个月前
  • Flexbox 解决 Android 中的底部滑动问题

    在移动端的开发中,经常会遇到底部滑动问题。特别是在 Android 设备上,由于不同设备的屏幕尺寸和其他因素的影响,很容易出现底部滑动异常的情况。本文就将介绍如何使用 Flexbox 布局来解决这个问...

    9 个月前
  • Kubernetes 中的调度框架与算法详解

    Kubernetes 是一个开源容器编排系统,可以自动化地部署、扩展和管理应用程序容器。调度是 Kubernetes 最重要的功能之一,在 Kubernetes 中,调度器负责将 Pod 分配到可用的...

    9 个月前
  • MongoDB 中 geoNear 命令使用技巧分享

    如果你正在开发一个涉及地理位置的应用程序,那么 MongoDB 的 GeoNear 命令将会是你的得力助手。GeoNear 命令可以用来查找附近的位置,以及计算距离和排序结果。

    9 个月前
  • SASS 中如何使用 @warn 输出警告信息

    SASS 中如何使用 @warn 输出警告信息 在 Sass 中,@warn 是一种很有用的命令,它可以用来输出警告信息,以便我们在开发过程中找到错误并进行修复。 @warn 命令只接受一个参数,该参...

    9 个月前
  • Serverless 环境下使用 Docker 遇到的问题及解决方案

    前言 在 Serverless 架构下,我们可以将一些应用分别打包成独立的函数,让它们在需要的时候自动调用执行,这大大提高了应用的可靠性和灵活性。但在某些情况下,我们需要在函数中使用 Docker 容...

    9 个月前
  • ES10 新增 Nullish Coalescing 运算符解决 Undefined 和 Null 判断的问题

    在前端开发中,我们经常需要对变量进行类型判断、空值判断等处理。在过去,我们一般使用 || 运算符来判断一个值是否为 undefined 或 null,如下所示: ----- ---- - ------...

    9 个月前

相关推荐

    暂无文章