模块4:主视图UI布局 - 使用Toolbar (4)
添加右侧新增按钮
先看效果图:

添加图标资源
右侧的新增操作按钮视觉上设计为一个白色加号图标。在res
文件夹上右键单击,在弹出菜单中选择“New -> Directory”,在弹出对话框中填写drawable-xxhdpi
并确认。得到如图所示的专门针对当前主流分辨率级别的资源目录:

将图标文件ic_add.png
拷贝到此目录下:

添加菜单描述文件
对于ActionBar或Toolbar上的类似操作,Android SDK将其统一作为菜单(Menu)来处理。
首先建立菜单说明文件。在res
文件夹下按照类似的方法创建名为menu
的文件夹。
然后在生成的menu
文件夹上右键单击,在弹出菜单中选择“New -> Menu resource”,在弹出对话框中填写文件名menu_main
并确认,得到新的菜单描述文件:

然后添加按钮对应的菜单项:

观察上面的菜单项,具有以下属性:
-
android:id
:用于代码中访问的资源ID,不多说了 -
android:title
:按钮文字标题 -
android:icon
:按钮图标 -
app:showAsAction
:该项决定菜单项是显示为文字还是显示为图标。此处我们选择always
,即永远显示为图标
其中,我们的代码中出现了两处红色的错误。第一处表明目前并没有一个名叫add_city
的字符串。将光标定位到出错的位置,按Alt+Enter键,在弹出菜单中选择“Create string value resource "add_city"”,在弹出的对话框中填写字串内容并确认,Android Studio自动添加了对应的字符串资源:

第二处报错表明相关的XML名字空间没有声明。纠正方法类似,光标定位后按Alt+Enter,自动添加相关声明,报错提示也随之消失:

创建菜单
到此为止,添加按钮对应的菜单项添加完毕。现在需要在Java代码中来关联和处理这个菜单项。打开MainActivity.java
,在类MainActivity
中重写两个方法:onCreateOptionsMenu()
和onOptionsItemSelected()
,其中前者用来根据菜单描述文件在Toolbar上创建菜单或者按钮,后者处理用户点击某菜单项的事件:

下面改写onCreateOptionsMenu()
方法以按照描述文件menu_main.xml
创建菜单:

然后改写onOptionsItemSelected ()
方法来处理按钮点击事件:

这里的逻辑就是,一旦发生菜单项点击事件,首先通过条件语句比对是否对应于某个特定的菜单项,然后执行对应的操作
当点击事件发生,我们简单的弹出一条消息作为响应。在后面的课程中,将处理真正的添加新位置的操作。在条件语句内添加消息弹出代码:

运行看效果:

现在只剩下左侧的抽屉菜单按钮了。
本小节涉及修改的文件有:
modified: app/src/main/java/com/dmtech/iw/MainActivity.java
modified: app/src/main/res/menu/menu_main.xml
modified: app/src/main/res/values/strings.xml