Material Design 中 AppBarLayout 和 ToolBar 的使用技巧

简介

AppBarLayout 和 ToolBar 是 Material Design 中重要的 UI 控件,两者经常一起使用来实现一个 Material Design 风格的顶部导航栏。AppBarLayout 是布局容器,可以根据内部内容的滚动状态动态地调整 ToolBar 的大小和位置;而 ToolBar 是一个视图组件,它提供了一个常见的工具栏布局,包括标题和菜单按钮。

本文将介绍如何使用 AppBarLayout 和 ToolBar 来构建一个 Material Design 风格的顶部导航栏,包括如何设置标题和菜单按钮,如何响应菜单按钮点击事件,以及如何优化滚动交互效果等内容。

创建 AppBarLayout 和 ToolBar

在布局文件中添加 AppBarLayout 和 ToolBar:

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

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

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

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

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

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

在这个布局中,CoordinatorLayout 是最外层容器,AppBarLayout 和 ToolBar 位于其中。注意,这里使用了 MaterialToolbar 来代替原生的 Toolbar,这是因为 MaterialToolbar 具有更多的 Material Design 特性和功能。

设置标题和菜单按钮

接下来,我们可以在代码中找到 ToolBar,并进行相应设置。在 MainActivity.java 中,可以使用 setSupportActionBar() 方法将 ActionBar 视为 ToolBar,并启用 ToolBar 的一些属性:

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

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

在这个例子中,setDisplayHomeAsUpEnabled() 方法将添加一个“返回”按钮(箭头图标,点击后将返回上一个 Activity)。

接下来,设置 ToolBar 的标题。可以使用 setTitle() 方法来设置标题文本,并使用 setTitleTextColor() 方法来设置标题颜色。例如:

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

添加菜单按钮和响应事件

要添加菜单按钮,需要创建一个菜单资源文件(在 res/menu/ 目录下),并使用 inflate() 方法在 Activity 的 onCreateOptionsMenu() 方法中创建菜单:

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

在菜单资源文件中,可以添加菜单项和菜单分组,例如:

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

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

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

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

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

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

同样的,要响应菜单按钮的点击事件,需要覆盖 onOptionsItemSelected() 方法。例如:

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

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

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

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

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

优化滚动交互效果

AppBarLayout 的一个强大之处是它可以根据内部视图的滚动状态来调整 ToolBar 的大小和位置。例如,可以在 RecyclerView 或 NestedScrollView 中添加一个 AppbarLayout.ScrollingViewBehavior,并将 AppBarLayout 和滚动视图放置到 CoordinatorLayout 中:

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

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

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

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

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

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

这里,我们给 AppBarLayout 指定了一个主题和一些属性,如标题、标题颜色、菜单和返回按钮图标等。将 RecyclerView 放置在 CoordinatorLayout 中,再将其指定为 AppBarLayout 的 scrolling view behavior。

通过对 scrolling view behavior 进行适当的配置,可以实现一些有趣的滚动效果,如上拉隐藏 ToolBar、下拉显示 ToolBar,或在滚动时改变 ToolBar 的颜色和透明度等效果,具体请看官方文档。

总结

通过上述示例,我们学习了如何使用 Material Design 中的 AppBarLayout 和 ToolBar 控件来创建一个 Material Design 风格的顶部导航栏,并使用菜单资源文件来添加菜单按钮,并响应相应事件。同时,我们也学习了如何使用 scrolling view behavior 来优化滚动交互效果。

在使用时注意一些细节问题,包括设置 ToolBar 的样式和属性、菜单资源文件的设计、响应菜单事件等。总之,尽可能遵循 Material Design 规范,会使你的应用更加美观、易用和可访问。

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


猜你喜欢

  • 如何使用 ES6 中的 WeakMap 及其在实际项目中的应用

    随着 JavaScript 语言的不断发展,ES6 引入了许多新的特性和 API,其中包括了 WeakMap。该 API 不同于前面我们所熟知的 Map,它可以让我们避免一些潜在的内存泄漏问题。

    1 年前
  • Chai AssertionError: expected 的含义及排错技巧

    在前端开发中,我们经常需要对代码进行测试。而 Chai 是一个广泛使用的 JavaScript 测试库,它提供了丰富的断言和行为驱动开发工具,使得测试过程更加简单和准确。

    1 年前
  • 在 ECMAScript 2017 (ES8) 中如何使用 SharedArrayBuffer

    SharedArrayBuffer 是 ECMAScript 2017 (ES8) 中新增的一个特性,它可以让 JavaScript 开发者使用共享内存进行多线程编程。

    1 年前
  • PWA 版本升级过程中的数据迁移和升级技巧

    Progressive Web Apps (PWA) 是一种新兴的 web 应用程序,它可以提供与原生应用程序相同的性能和体验。当您更新 PWA 版本时,您可能需要进行数据迁移和升级,以确保用户无缝地...

    1 年前
  • 解决 Hapi 框架中的内存泄漏问题

    背景 Hapi 是 Node.js 编写的一个 Web 框架,具有插件化、即插即用等特点,广泛用于构建 Web 应用和 API。然而,在使用 Hapi 框架时,也经常遇到内存泄漏问题,导致应用变得越来...

    1 年前
  • 使用 Socket.io 和 NodeJS 构建一个实时 web 应用

    1. 背景 现代 web 应用的流行,使得人们更加追求实时交互和即时更新的页面内容。在传统的 web 技术中,实现这种实时交互需要频繁地向服务器发送请求,然后再将服务器的响应信息重新渲染页面,在长时间...

    1 年前
  • ES7 异步编程利器:Generator 和 yield

    在前端应用中,异步编程已经成为了必不可少的技能。尤其是在现代 Web 应用中,我们经常需要执行一些耗时的操作,比如向后端请求数据、渲染复杂的 UI 界面等。为了确保用户体验,我们需要确保这些操作能够以...

    1 年前
  • PM2 诊断和性能调优的基本思路

    如果你是一名前端开发人员,你一定知道 PM2 这个工具。它可以帮助我们管理 Node.js 进程,并提供一些额外的功能,如日志记录、自动重启、负载均衡等。除了这些基本功能之外,PM2 还提供了一些诊断...

    1 年前
  • 如何用 Cypress 测试 React + Material UI 的应用程序?

    前言 在前端开发中,测试是一个至关重要的环节。Cypress 是一个现代化的前端测试工具,它提供了流畅、可靠、快速的浏览器端自动化测试体验。而 React + Material UI 这个组合是前端开...

    1 年前
  • Mongoose 多条件查询方法详解

    在 Node.js 中,Mongoose 是一个非常流行的 MongoDB 数据库 ORM(对象关系映射)工具,用于在 Node.js 环境中与 MongoDB 数据库进行交互。

    1 年前
  • 解决 CSS Reset 对表单样式重置的问题

    在前端开发中,为了避免不同浏览器的表现不一致,我们经常会使用 CSS Reset 来清除不同浏览器默认样式的影响。但是,使用 CSS Reset 后,我们可能会发现表单样式被重置了,导致界面丑陋不堪。

    1 年前
  • 用 Generator 解决 JavaScript 中异步编程的困扰

    JavaScript 是一门单线程编程语言,异步编程是其重要特性。在异步编程中需要大量使用回调函数,然而回调函数嵌套过多导致出现回调地狱,程序可读性和可维护性变差。

    1 年前
  • ES11 中数组的 flat() 和 flatMap() 方法详解

    JavaScript 中的数组是一种非常重要的数据结构,它能够存储多个元素并提供一些强大的操作方法。在 ES11(也称为 ECMAScript 2020)中,JavaScript 的数组又新增了两个方...

    1 年前
  • Deno 如何处理多进程并发 #

    Deno 是一个现代的 JavaScript/TypeScript 运行时, 它发挥了 Node.js 的作用,同时创造了一个全新的生态系统。与 Node.js 不同,Deno 提供了更好的默认安全性...

    1 年前
  • 如何使用 HTTP 状态码来处理 RESTful API 请求

    RESTful API 是一种使用 HTTP 协议进行通信的 Web 应用程序接口设计风格,具有简单、易用、灵活、可扩展等特点。而 HTTP 状态码则是在传输过程中用于表达客户端与服务器之间交互状态的...

    1 年前
  • 使用 Mocha 测试框架中遇到的 “Error: timeout of 5000ms exceeded” 问题解决方法

    在前端开发中,测试是非常重要的一部分。而 Mocha 是目前比较受欢迎的一款 JavaScript 测试框架。但是在使用 Mocha 进行测试时,我们有时会遇到一个问题,即 “Error: timeo...

    1 年前
  • 使用 Jest 测试 React Native 应用 Navigation

    Jest 是一个流行的 JavaScript 测试框架,可以用来测试 React、React Native 或其他 JavaScript 应用程序的代码。React Native 是一种使用 Java...

    1 年前
  • 如何使用 ES9 中的基于 Symbol 的枚举

    在 JavaScript 中,枚举是一种常用的数据类型。在 ES9 中,我们可以使用基于 Symbol 的枚举来更好地控制枚举类型的取值范围,从而提高代码的可读性和可维护性。

    1 年前
  • Angular 中的 RxJS,HTTP 缓存数据的实现及应用

    在前端开发中,HTTP 缓存数据是重要的优化方式之一,可以减少请求次数,提高网站的加载速度。在 Angular 中,可以使用 RxJS 来实现 HTTP 缓存数据的功能。

    1 年前
  • 如何在 Custom Elements 中集成第三方 JavaScript 库

    Custom Elements 是 Web Components 技术中的一种,它允许开发者自定义 HTML 标签并在页面中使用。但是,Custom Elements 只是一个 Web Compone...

    1 年前

相关推荐

    暂无文章