添加第二个工具栏
概述
Toolbar
的作用不仅仅是取代操作栏 - 它可以在一个活动中被多次使用,可以进行自定义以放置在屏幕上的任何位置,并且可以配置为仅跨越屏幕的部分宽度。 下面的示例说明了如何创建第二个 Toolbar
并将其放置在屏幕底部。
此 Toolbar
将实现“复制”、“剪切”和“粘贴”菜单项。
定义第二个工具栏
编辑布局文件 Main.axml 并将其内容替换为以下 XML:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<include
android:id="@+id/toolbar"
layout="@layout/toolbar" />
<LinearLayout
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/main_content"
android:layout_below="@id/toolbar">
<ImageView
android:layout_width="fill_parent"
android:layout_height="0dp"
android:layout_weight="1" />
<Toolbar
android:id="@+id/edit_toolbar"
android:minHeight="?android:attr/actionBarSize"
android:background="?android:attr/colorAccent"
android:theme="@android:style/ThemeOverlay.Material.Dark.ActionBar"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
</RelativeLayout>
此 XML 可将第二个 Toolbar
添加到屏幕底部,其中屏幕中间为空的 ImageView
。 此 Toolbar
的高度设置为操作栏的高度:
android:minHeight="?android:attr/actionBarSize"
此 Toolbar
的背景色设置为下一步将定义的主题色:
android:background="?android:attr/colorAccent
请注意,此 Toolbar
基于的主题 (ThemeOverlay.Material.Dark.ActionBar) 与替换操作栏中创建的 Toolbar
所使用的主题不同 - 它不绑定到活动的窗口装饰,也不绑定到第一个 Toolbar
中使用的主题。
编辑 Resources/values/styles.xml 并将以下主题色添加到样式定义:
<item name="android:colorAccent">#C7A935</item>
这将为底部工具栏提供深琥珀色。 生成并运行应用会在屏幕底部显示空白的第二个工具栏:
添加编辑菜单项
本部分介绍如何将编辑菜单项添加到底部 Toolbar
中。
向辅助 Toolbar
添加菜单项:
将菜单图标添加到应用项目的
mipmap-
文件夹(如果需要)。通过将其他菜单资源文件添加到 Resources/menu 可定义菜单项的内容。
在活动的
OnCreate
方法中,找到Toolbar
(通过调用FindViewById
)并扩充Toolbar
的菜单。针对新菜单项在
OnCreate
中实现单击处理程序。
以下部分详细介绍了此过程:将“剪切”、“复制”和“粘贴”菜单项添加到底部 Toolbar
中。
定义“编辑菜单”资源
在 Resources/menu 子目录中,创建一个名为 edit_menus.xml 的新 XML 文件,并将内容替换为以下 XML:
<?xml version="1.0" encoding="utf-8" ?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/menu_cut"
android:icon="@mipmap/ic_menu_cut_holo_dark"
android:showAsAction="ifRoom"
android:title="Cut" />
<item
android:id="@+id/menu_copy"
android:icon="@mipmap/ic_menu_copy_holo_dark"
android:showAsAction="ifRoom"
android:title="Copy" />
<item
android:id="@+id/menu_paste"
android:icon="@mipmap/ic_menu_paste_holo_dark"
android:showAsAction="ifRoom"
android:title="Paste" />
</menu>
此 XML 将创建“剪切”、“复制”和“粘贴”菜单项(使用已添加到替换操作栏的 mipmap-
文件夹的图标)。
扩充菜单
在 MainActivity.cs 中 OnCreate
方法的末尾,添加以下代码行:
var editToolbar = FindViewById<Toolbar>(Resource.Id.edit_toolbar);
editToolbar.Title = "Editing";
editToolbar.InflateMenu (Resource.Menu.edit_menus);
editToolbar.MenuItemClick += (sender, e) => {
Toast.MakeText(this, "Bottom toolbar tapped: " + e.Item.TitleFormatted, ToastLength.Short).Show();
};
此代码将查找 Main.axml 中定义的 edit_toolbar
视图,将其标题设置为“编辑”,并扩充其菜单项(在 edit_menus.xml 中进行定义)。 它定义一个菜单单击处理程序,该处理程序显示一个 Toast 以指示点击了哪个编辑图标。
生成并运行应用。 应用运行时,上面添加的文本和图标将如下所示:
点击“剪切”菜单图标会导致显示以下 Toast:
点击任一工具栏上的菜单项将显示生成的 Toast:
“向上”按钮
大多数 Android 应用都依赖于“后退”按钮进行应用导航;按“后退”按钮会将用户转到上一屏幕。 但是,你可能还想要提供一个“向上”按钮,使用户可以轻松地“向上”导航到应用的主屏幕。 当用户选择“向上”按钮时,用户会向上移动到应用层次结构中的更高级别 - 也就是说,应用会向用户弹出后退堆栈中的多个活动,而不是弹回到之前访问过的活动。
要在使用 Toolbar
作为操作栏的第二个活动中启用“向上”按钮,请在第二个活动的 OnCreate
方法中调用 SetDisplayHomeAsUpEnabled
和 SetHomeButtonEnabled
方法:
SetActionBar (toolbar);
...
ActionBar.SetDisplayHomeAsUpEnabled (true);
ActionBar.SetHomeButtonEnabled (true);