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.support.v7.widget.Toolbar
    android:id="@+id/toolbar"
    android:layout_width="match_parent"
    android:layout_height="?attr/actionBarSize"
    android:background="@color/colorPrimary"
    app:popupTheme="@style/AppTheme.PopupOverlay" />

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

2.2 动态创建 Toolbar

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

Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);

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

Toolbar toolbar = getSupportActionBar();

3. 使用 Toolbar

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

3.1 操作按钮

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

<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
 
    <item
        android:id="@+id/action_search"
        android:icon="@drawable/ic_search"
        android:title="@string/action_search"
        app:showAsAction="always" />
         
    <item
        android:id="@+id/action_settings"
        android:orderInCategory="100"
        android:title="@string/action_settings"
        app:showAsAction="never" />
</menu>

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

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

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.toolbar_menu, menu);
    return true;
}
 
@Override
public boolean onOptionsItemSelected(MenuItem item) {
    int id = item.getItemId();
    if (id == R.id.action_settings) {
        return true;
    } else if (id == R.id.action_search) {
        return true;
    }
 
    return super.onOptionsItemSelected(item);
}

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

3.2 溢出菜单

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

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

<item
    android:id="@+id/action_overflow"
    android:icon="@drawable/ic_overflow"
    android:title="@string/action_overflow"
    app:showAsAction="always">
 
    <menu>
        <item
            android:id="@+id/action_item1"
            android:title="@string/action_item1"/>
 
        <item
            android:id="@+id/action_item2"
            android:title="@string/action_item2"/>
 
        <item
            android:id="@+id/action_item3"
            android:title="@string/action_item3"/>
    </menu>
</item>

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

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

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    int id = item.getItemId();
    if (id == R.id.action_overflow) {
        PopupMenu popup = new PopupMenu(this, findViewById(R.id.action_overflow));
        popup.getMenuInflater().inflate(R.menu.popmenu, popup.getMenu());
 
        popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
            @Override
            public boolean onMenuItemClick(MenuItem item) {
                int id = item.getItemId();
                if (id == R.id.action_item1) {
                    return true;
                } else if (id == R.id.action_item2) {
                    return true;
                } else if (id == R.id.action_item3) {
                    return true;
                }
 
                return false;
            }
        });
 
        popup.show();
    }
 
    return super.onOptionsItemSelected(item);
}

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

4. 总结

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

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/65a4dec9add4f0e0ffd386c6


纠错反馈