Material Design 中的 Toolbar 控件详解

Material Design 是 Google 推出的视觉语言,强调界面元素的材料化造型、阴影、动画等效果,以及基于用户通过触摸、鼠标、手势等输入方式进行交互的设计风格。在 Material Design 中,Toolbar 控件是极其重要的组件之一,本文将详细介绍 Toolbar 的使用方法。

1. Toolbar 的基本介绍

Toolbar 是多种 Android 和 Web 应用程序中的重要组件,通常显示应用程序的标题(标题文本图标)、标题栏、应用程序操作和导航按钮。在 Material Design 中,Toolbar 是实现应用程序品牌标识、导航和操作的主要方式。

Toolbar 的基本布局类似于一个普通的 ActionBar,但是 Toolbar 的可定制性更强,功能也更加齐全。它可以包含一个应用图标、一个应用名称和一个名为菜单按钮(也称作溢出菜单按钮)的组件,以及其他自定义的视图(如搜索框)。

2. 创建 Toolbar

Toolbar 的创建一般有两种方式,一种是静态创建,即在 XML 布局文件中创建,另外一种是动态创建。下面我们分别来看这两种方式的实现方法。

2.1 静态创建 Toolbar

在 XML 布局文件中,我们可以通过在顶层使用 android.support.v7.widget.Toolbar 标签来创建 Toolbar。

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

其中 android:id 属性用于给 Toolbar 命名,方便在代码中进行引用。android:background 属性指定 Toolbar 背景颜色,app:popupTheme 属性装饰菜单弹出框的样式。

2.2 动态创建 Toolbar

在 Java 代码中,我们可以通过以下代码来动态地创建 Toolbar。

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

其中 findViewById 方法的参数是所创建的 Toolbar 的 id。setSupportActionBar 方法设置 Toolbar 为应用程序的主支持操作栏。如果我们要通过代码来操作 Toolbar,则需使用以下代码获取 Toolbar 实例。

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

3. 使用 Toolbar

Toolbar 的使用方法虽然简单,但是却十分灵活,下面的示例代码将演示如何使用 Toolbar。

3.1 操作按钮

Toolbar 的操作按钮位置在 Toolbar 最右侧。我们可以通过以下方式来为 Toolbar 添加操作按钮。

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

在这个菜单文件中,我们定义了两个操作按钮,app:showAsAction 属性指定了该项应如何显示。对于 always 选项,该项将始终显示在 Toolbar 中;对于 never 选项,该项将始终显示在溢出菜单中。

在 Java 代码中,我们需要使用以下代码来连接 Toolbar 和上面的菜单文件。

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

在这个示例代码中,onCreateOptionsMenu 方法在 Toolbar 中添加操作菜单,onOptionsItemSelected 方法在点击菜单项时执行相应操作。

3.2 溢出菜单

Toolbar 的溢出菜单是菜单中没有充足空间时自动隐藏的菜单。在前面的菜单文件中,app:showAsAction 的值为 never 的菜单将会出现在溢出菜单中。

我们需要使用以下代码来强制溢出菜单出现在 Toolbar 中。

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

在这个示例代码中,最外层的菜单项显示了溢出菜单按钮,通过在最外层菜单项中嵌套菜单,我们可以在溢出菜单中添加更多的菜单项。

在 Java 代码中,我们需要使用以下代码来检测溢出菜单中的菜单项的点击事件。

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

在这个示例代码中,PopupMenu 类用于显示和控制溢出菜单项检测其点击事件,为此我们需要注册 OnMenuItemClickListener 事件,以便在点击菜单项时执行相应操作。

4. 总结

本文介绍了 Material Design 中的 Toolbar 控件,包括 Toolbar 的基本介绍、创建方式、使用方法,以及如何添加操作按钮和溢出菜单。Toolbar 控件使用灵活,功能齐全,在 Android 和 Web 应用程序中都得到广泛的应用。

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


猜你喜欢

  • ES12 中引入的新 Array 扩展操作符:flat() 和 flatMap() 的使用方法

    ES12 中引入了许多新的语言特性和语法糖,其中包括了两种新的数组扩展操作符:flat() 和 flatMap()。这两种操作符可以让我们在处理数组时更加高效和方便,不仅能够提高代码的可读性,还能够简...

    9 个月前
  • ES11 中数组扩展:flat() 和 flatMap() 方法的真正使用方法

    ES11 中数组扩展:flat() 和 flatMap() 方法的真正使用方法 在 JavaScript 中,数组是非常常用的一种数据结构。为了更好地处理数组,ES11 引入了两个新的数组扩展方法:f...

    9 个月前
  • Serverless 架构中 API Gateway 未授权访问的解决方案

    背景 随着云计算和 Serverless 架构的迅速发展,API Gateway 作为 Serverless 架构的重要组成部分,扮演着连接云服务和前端应用的枢纽角色。

    9 个月前
  • Koa2 中如何记录日志

    Koa2 是一个轻量级的 Node.js Web 应用框架,它简化了开发 Web 应用的过程,提高了开发效率。在实际开发中,我们经常需要记录一些日志来帮助我们分析问题和监控系统运行情况。

    9 个月前
  • 使用 Custom Elements 和 SVG 动画创建交互式游戏

    前言 随着互联网技术的发展,人们越来越倾向于在数字世界中寻找娱乐和放松,尤其是在移动设备上。当然,这并不是说传统的桌面游戏已经过时了,但是我们需要更多的方式去探索数字游戏的可能性。

    9 个月前
  • 使用 CSS Flexbox 常见布局技巧以及解决方案

    随着前端页面复杂度的不断提高,我们需要更加高效地进行页面布局和组合元素。传统的布局方法,如使用浮动和定位等,已经不能满足我们的需求。同时,CSS Flexbox 作为一种新的布局方式,其优点逐渐显露出...

    9 个月前
  • 使用 babel+webpack 来优化你的代码

    使用 babel+webpack 来优化你的代码 在前端开发中,我们经常需要将 ES6+ 语法转换为 ES5 语法,以兼容旧浏览器。babel 可以实现这个功能。同时,webpack 可以对前端资源进...

    9 个月前
  • 如何实现含动画效果的 Material Design 中的 Snackbar

    Snackbar 是 Material Design 中的一种弹出式交互控件,可以在屏幕底部或顶部弹出一条消息,类似于 Toast,但具有更加复杂的 UI 和交互特性。

    9 个月前
  • PWA 与 APK 之间的异同及如何进行选择

    前言 移动应用是我们日常生活中不可或缺的一部分。但是,应用商店中的 APP 数量已经过多,普通用户已经无法处理安装那么多 APP 的问题。因此,出现了 PWA 技术。

    9 个月前
  • CSS Reset 可能引起的 margin 和 padding 问题解决方法

    CSS Reset 是前端开发中常见的一种技术,在实现网页和应用的时候,为了避免浏览器之间的差异,开发者通常会使用 CSS Reset 技术来将页面的样式归零。CSS Reset 可以使得各个浏览器对...

    9 个月前
  • 解决在 ES9 中使用 RegExp 对象时遇到的错误

    在 ES9 中,RegExp 对象的正则表达式中如果使用到了 Unicode 范围会有一些操作上的限制。本文将介绍这些限制,以及如何解决这些限制带来的问题。 问题描述 在 ES9 中,如果 RegEx...

    9 个月前
  • 详解 ES10 的 String.trimStart 和 String.trimEnd 方法

    在 ES10 中新增的 String.trimStart 和 String.trimEnd 方法是用来去除字符串开头和结尾空格的功能,相较于原有的 String.trim 方法,可以更具有针对性地满足...

    9 个月前
  • RESTful API 与 SOAP API 的异同比较

    在前端开发中,API 是避免不了的话题。目前常用的两种 API 形式是 RESTful API 和 SOAP API。这两种 API 在功能、结构、交互方式等方面存在显著差异。

    9 个月前
  • ES7 之 Proxy 代理详解

    前言 JavaScript 是一种弱类型语言,给编程带来了很大的灵活性,但也因此带来了一些安全性方面的问题,比如通过修改或篡改对象属性来达到非法访问或修改数据的目的,而 Proxy 是一种新的解决方案...

    9 个月前
  • React 项目优化之性能篇:Header、Footer、Content 组件优化实例剖析

    前言 在前端开发中,对于项目的优化一直是一个重要的主题。尤其在 React 项目中,由于其组件化的特性,对于每个组件的优化更是至关重要。 本文将从 Header、Footer、Content 组件三个...

    9 个月前
  • 用 Sequelize 实现 CRUD 的详细指南

    Sequelize 是一个 Node.js ORM 框架,它支持多种数据库,并且提供了非常方便的 API 使得开发人员可以方便地进行数据库操作。在本篇文章中,我们将会使用 Sequelize 实现 C...

    9 个月前
  • async/await 和 Promise 的区别

    在 JavaScript 中,异步编程是一个不可避免的话题。为了处理异步操作,JavaScript 提供了两种机制:Promise 和 async/await。它们的本质区别在于,Promise 是一...

    9 个月前
  • Sass 中使用!global 变量

    Sass 中使用 $global 变量 在前端开发的过程中,我们经常需要使用 CSS 来为网站添加样式,如颜色、字体大小和布局等等。然而,CSS 的语法比较繁琐,缺少编程语言的一些特性,例如变量、函数...

    9 个月前
  • 如何使用 ES12 中的可选链运算符处理 undefined 和 null

    在前端开发中,我们经常会处理对象的属性或方法,但是当访问一个未定义的属性时,就会出现 undefined,而在链式调用中,如果其中一个对象为 null 或 undefined,则程序将崩溃。

    9 个月前
  • CSS Flexbox 动画:实现简单的进度条效果

    在前端开发中,设计动画效果可以提高用户体验和界面交互。在本篇文章中,我们将介绍如何使用 CSS Flexbox 动画来实现简单的进度条效果。 什么是 CSS Flexbox? CSS Flexbox ...

    9 个月前

相关推荐

    暂无文章