Material Design 中实现底部弹出对话框的方法

Material Design 是 Google 推出的设计语言,其目的是为了帮助开发者以及设计师提供一种关注用户体验、更人性化的产品设计风格。在 Material Design 中,弹出对话框是一种常用的交互方式。本文将重点介绍在 Material Design 中实现底部弹出对话框的方法。

常用的底部弹出对话框样式

在 Material Design 中,底部弹出对话框通常被称作 Bottom Sheet。Bottom Sheet 的设计通常有三种形式:

  • 完整展开的 Bottom Sheet。此时 Bottom Sheet 会充满整个屏幕。
  • 摘要展示的 Bottom Sheet。此时 Bottom Sheet 只会显示一个简要的内容摘要,用户可以点击摘要进入具体的内容界面。
  • 模态展示的 Bottom Sheet。此时 Bottom Sheet 会以模态的形式展示,背景会变得半透明,用户无法在背景区域进行操作,只能对 Bottom Sheet 中的内容进行操作。

下面是三种样式的示意图:

实现底部弹出对话框的步骤

在 Material Design 中,实现底部弹出对话框的步骤如下:

  1. 引入 Material Design 的相关依赖。
  2. 定义 Bottom Sheet 的布局文件。在布局文件中,定义 Bottom Sheet 的样式以及中间的内容区域。
  3. 定义 Bottom Sheet 的打开和关闭方式。可以通过代码或者动画的方式来实现打开和关闭 Bottom Sheet 的效果。
  4. 将 Bottom Sheet 与需要触发展示 Bottom Sheet 的 View 绑定。

下面将从以上四个步骤逐一讲解。

1. 引入 Material Design 的相关依赖

在实现 Material Design 的相关组件时,我们需要在项目中引入 Material Design 的相关依赖。

  • 如果您是用 Gradle 构建项目,则需要在 build.gradle 文件中添加以下依赖:
------------ -
  -------------- --------------------------------------------
-
  • 如果您是用 Maven 构建项目,则需要在 pom.xml 文件中添加以下依赖:
------------
  ----------------------------------------------
  ---------------------------------
  ------------------------
  ----------------
-------------

2. 定义 Bottom Sheet 的布局文件

在布局文件中,我们需要定义 Bottom Sheet 的样式以及中间的内容区域。

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

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

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

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

在上述代码中,我们添加了一个 BottomSheetBehavior 的容器。在容器中,我们新建了一个 LinearLayout 来存放 Bottom Sheet 中的内容。

需要注意的是,我们通过设置 app:behavior_hideable="true" 来让 Bottom Sheet 可以被隐藏,也就是点击背景可以关闭 Bottom Sheet。我们通过设置 app:behavior_peekHeight="140dp" 来让 Bottom Sheet 在未被展开时,只显示底部 140 dp。

3. 定义 Bottom Sheet 的打开和关闭方式

我们可以通过代码或者动画的方式来实现打开和关闭 Bottom Sheet 的效果。下面以代码的方式演示如何打开和关闭 Bottom Sheet。

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

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

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

在上述代码中,我们通过定义 Bottom Sheet 的 Behavior,然后通过 bottomSheetBehavior.setState() 方法来实现打开和关闭 Bottom Sheet 的效果。其中,BottomSheetBehavior.STATE_EXPANDED 表示完全展开的 Bottom Sheet,BottomSheetBehavior.STATE_COLLAPSED 表示摘要展示的 Bottom Sheet。

4. 将 Bottom Sheet 与需要触发展示 Bottom Sheet 的 View 绑定

最后一个步骤,我们需要将 Bottom Sheet 与需要触发展示 Bottom Sheet 的 View 绑定。

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

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

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

在上述代码中,我们通过定义一个需要触发 Bottom Sheet 展示的 Button,然后将 Bottom Sheet 与该 Button 绑定。在按钮点击事件中,我们通过设置 Bottom Sheet 的 Behavior,来实现 Bottom Sheet 的展示。

完整示例代码

下面是一个完整的 Material Design 底部弹出对话框的实现示例。

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

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

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

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

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

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

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

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

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

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

总结

在 Material Design 中,底部弹出对话框是一种常用的交互方式。通过本文的介绍,相信大家已经掌握了如何在 Material Design 中实现底部弹出对话框的方法。在实际开发中,我们需要根据不同的需求以及设计要求来选择使用不同的 Bottom Sheet 样式,从而达到更好的用户体验效果。

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


猜你喜欢

  • 状态监控 Demo:Server-sent Events + Flask 实例

    本文介绍如何使用 Server-sent Events 和 Flask 实现一个状态监控的 demo。在该 demo 中,我们可以实时查看某个接口请求的响应状态及时间等信息。

    1 年前
  • Socket.io 实现远程控制的方法

    前言 随着 Web 技术的不断发展,Web 应用的功能越来越强大。在开发过程中,我们经常需要实现远程控制的功能。本文将介绍利用 Socket.io 技术实现远程控制的方法,用于帮助前端工程师更好地实现...

    1 年前
  • 如何在 Angular 中使用 RxJS5

    RxJS 是针对 JavaScript 的响应式编程的库,RxJS 5 是目前最新的版本。RxJS 5 提供了许多的优秀的 API,用于管理并发数据流。使用 RxJS5 可以使代码更加简单且易于维护。

    1 年前
  • JavaScript Promise 中的错位解析顺序

    JavaScript Promise 作为一种解决异步编程的方案,已经被广泛应用于前端开发中。然而,在 Promise 中,虽然我们可以使用 then 和 catch 方法来处理异步操作的结果,但是,...

    1 年前
  • 解决 GraphQL 在多线程访问时的问题

    GraphQL 是一种用于 API 的查询语言和运行时,它提供了一些特殊的优点,例如字段级别的选择数据,类型系统,以及强大的工具链。随着 GraphQL 在前端项目中的广泛应用,有些项目也会遇到一些问...

    1 年前
  • Fastify 中间件详解

    什么是 Fastify? Fastify 是一个高效的 web 框架,特别针对 Node.js 代码进行优化。它的特点是快速、低耗系统资源,还支持一些比较新的 JavaScript 特性,例如 Pro...

    1 年前
  • 核心 Web Components 技术源码解析

    什么是 Web Components? Web Components 是一种 Web 技术,它可以被视为是一组浏览器 API 和特性,用于创建、打包和重用网页上的自定义元素和组件。

    1 年前
  • 如何在 ECMAScript 2016 中使用模板字面量做字符串拼接?

    什么是模板字面量? 模板字面量是 ECMAScript 2016 中新增的语法糖,它可以让我们更加方便地进行字符串拼接。在模板字面量中,我们可以使用 ${} 来嵌入变量或表达式,并且可以在其中进行格式...

    1 年前
  • Flexbox 布局下实现响应式图片列表浏览的优秀方案

    在现代网页设计中,对于最终用户体验的重视已经超过以往。而对于响应式设计的布局与优化就是其中一个非常重要的方面。而 Flexbox 布局作为最新的一种布局方式,其实现响应式图片列表浏览的优秀方案就是我们...

    1 年前
  • 如何提升 Elasticsearch 在大数据集合上搜索性能?

    如何提升 Elasticsearch 在大数据集合上搜索性能? Elasticsearch 是一个开源的分布式搜索和分析引擎,用于处理和存储大量的数据。它已成为许多大型应用程序的首选搜索引擎,然而在大...

    1 年前
  • ES12 中遇到的 Nullish Coalescing 操作符无法正确处理 Falsy 值的问题

    在 JavaScript 中,常常会使用到或运算符 || 来进行默认值设置。但是,这种做法会出现一些问题,例如当计算结果为 0、''、false 等 falsy 值时,也会返回默认值,这显然是不符合我...

    1 年前
  • CSS Grid 中使用 grid-auto-flow 属性实现自动布局

    CSS Grid 是一个强大的布局工具,它可以让我们以非常灵活的方式进行网格布局,从而实现复杂的布局效果。其中,grid-auto-flow 属性是 CSS Grid 中一个非常有用的属性,用于控制 ...

    1 年前
  • ES9 中的异步迭代器和生成器

    ES9 中的异步迭代器和生成器 在 ES9 中,JavaScript 引入了异步迭代器和生成器的概念,这使得在处理异步数据流时变得更加方便和灵活。 异步迭代器 异步迭代器是迭代器的一种变体,可以处理异...

    1 年前
  • LESS CSS 中如何实现文字效果?

    LESS CSS 是一种动态样式语言,它是 CSS 的一种扩展。LESS CSS 通过在 CSS 中添加一些特性,如变量、混合、嵌套、继承和函数等,使得 CSS 变得更加强大和灵活。

    1 年前
  • 如何使用 Deno 进行 OAuth2 身份验证?

    OAuth2 是当前最常用的身份验证机制之一,它允许用户通过第三方应用程序访问他们在其他应用程序上的资源。在前端应用中,我们通常需要 OAuth2 来实现用户登录、授权和保护敏感数据等操作。

    1 年前
  • ESLint 无法校验 ES6 中模板字符串的语法

    ESLint 是一个非常流行的 JavaScript 代码校验工具,能够帮助前端开发人员在编写代码的时候遵循一定的规范和最佳实践。然而,在 ES6 中,使用模板字符串来处理字符串操作是一种非常常见的方...

    1 年前
  • ES2020:如何正确使用 Promise.allSettled()

    在 ES2020 中,一个新的方法 Promise.allSettled() 在 Promise API 中被引入。与 Promise.all 相比,Promise.allSettled() 可以让我...

    1 年前
  • 使用 Webpack 构建 Vue + ElementUI 项目

    介绍 Vue 是一款流行的 JavaScript 前端框架之一,而 ElementUI 则是一套基于 Vue 的 UI 组件库,两者组合使用,可以大大提高前端开发效率。

    1 年前
  • 解决 Vuex 在 Vue.js SPA 开发中的所遇到的坑

    Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式和库,它可以帮助我们在组件之间实现共享状态。但是,在 Vue.js SPA 的开发过程中,使用 Vuex 可能会遇到一些问题和坑,这篇文章...

    1 年前
  • Sequelize 之 hasOne 关系详解

    Sequelize 是 Node.js 环境下的 ORM(对象关系映射)框架,支持多种数据库(如 MySQL、PostgreSQL 等)。使用 Sequelize,我们可以通过 JavaScript ...

    1 年前

相关推荐

    暂无文章