开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 5 天,点击查看活动详情
前言
本篇是安卓开发必备基础的第十二篇,本篇是用来讲述Menu是如何在Activity中使用的,Menu就是菜单,我们可以在页面空间不足的时候去使用它,这样就可以放下更多的东西展示,我们经常用到的微信和QQ都有很多菜单的设计,下面就让我们看看Menu在安卓项目中如何创建使用。
正篇
使用方法
首先,我们需要在res目录下新建一个文件夹叫“menu”,然后再在这个新建的文件夹中创建Menu资源文件,具体操作如下图所示:
我们可以为这个文件起一个新名字,这里我命名为“main”,它是XML类型的文件,接着我们在这个文件中添加下面的代码:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/scan_item"
android:title="@string/scan"/>
<item
android:id="@+id/add_item"
android:title="@string/add_new_friend"/>
</menu>
简单的在XML中的menu标签下增加了两个item标签,为item增加android:id方便调用控制,增加android:title为该item增加标题内容文字。
这样我们就为新建的菜单创建了两项新内容,当然这只是布局部分,我们还需要在添加Menu的Activity中重写onCreateOptionsMenu()方法(快捷键Win:Ctrl+o,Mac:control+o,可以快速查找当前文件的可复写方法),就如方法名的字面意思是用来创建我们的菜单menu,在这个方法中调用menuInflater.inflate()方法我们将刚刚写好的布局填充进我们的Menu然后返回true即可:
override fun onCreateOptionsMenu(menu: Menu?): Boolean {
menuInflater.inflate(R.menu.main, menu)
return true
}
到这里,我们完成了UI的展示部分,我们还需要有控制的逻辑,所以我们还需要复写onOptionsItemSelected方法对Menu的每项进行逻辑控制,这里我们是点击相应的一项就会对应弹窗,代码如下:
override fun onOptionsItemSelected(item: MenuItem): Boolean {
when (item.itemId) {
R.id.scan_item -> Toast.makeText(this, "Scan!", Toast.LENGTH_LONG).show()
R.id.add_item -> Toast.makeText(this, "Add!", Toast.LENGTH_LONG).show()
}
return true
}
onOptionsItemSelected()方法,这里就是用来回调我们添加在menu布局的item项的方法,在其中我们通过when循环查找我们添加的item的id,通过Kotlin语言的简写方法我们将Toast弹窗提示对应到我们的每个item项的点击监听中。
最终效果
注意:themes不要选择无标题的:
如果选择无标题的主题,我们最后构建出的app将会不自动展示我们的AppBar标题栏,而我们添加的menu所展示的位置也是在此处,所以也会无法展示出来效果,等于白写了。
效果如下:
可以看到标题最右侧出现三个点,点击时展开菜单,点击对应的项就有对应弹窗出现。
总结
这个Menu最关键的是如果不使用对应的主题,比如无标题栏主题,我们运行APP就不会展示,不知道在应用其他主题时我们是只能自定义写,还是说有其他方法去改善体验。