安卓开发基础——Menu菜单的使用

726 阅读3分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 5 天,点击查看活动详情

前言

本篇是安卓开发必备基础的第十二篇,本篇是用来讲述Menu是如何在Activity中使用的,Menu就是菜单,我们可以在页面空间不足的时候去使用它,这样就可以放下更多的东西展示,我们经常用到的微信和QQ都有很多菜单的设计,下面就让我们看看Menu在安卓项目中如何创建使用。

正篇

使用方法

首先,我们需要在res目录下新建一个文件夹叫“menu”,然后再在这个新建的文件夹中创建Menu资源文件,具体操作如下图所示:

image.png

image.png 我们可以为这个文件起一个新名字,这里我命名为“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增加标题内容文字。

image.png 这样我们就为新建的菜单创建了两项新内容,当然这只是布局部分,我们还需要在添加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不要选择无标题的:

image.png

如果选择无标题的主题,我们最后构建出的app将会不自动展示我们的AppBar标题栏,而我们添加的menu所展示的位置也是在此处,所以也会无法展示出来效果,等于白写了。

效果如下:

327a699dd794761468cd5363928385ed.gif

可以看到标题最右侧出现三个点,点击时展开菜单,点击对应的项就有对应弹窗出现。

总结

这个Menu最关键的是如果不使用对应的主题,比如无标题栏主题,我们运行APP就不会展示,不知道在应用其他主题时我们是只能自定义写,还是说有其他方法去改善体验。