为了不显示标题栏,所以主题使用了 NoActionBar,这也直接导致选项菜单无处显示,添加一个ToolBar,自定义标题栏。添加menu资源文件夹,添加menu文件,在activity创建的时候创建menu,重载onCreateOptionsMenu,添加菜单项点击事件onOptionsItemSelected。

菜单无法显示

为了不显示标题栏,所以主题使用了 NoActionBar,这也直接导致选项菜单无处显示

解决方案

添加一个ToolBar,自定义标题栏


以下为kotlin语法,如果你用的是java语法,结构有差,但核心代码是一样的 setSupportActionBar(mBinding.mainMenuEbook)
这里我使用了 ViewBinding,如果你没有开启,那就把 mBinding.mainMenuEbook 替换成 R.id.你的toolbar控件来使用

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setSupportActionBar(mBinding.mainMenuEbook)
}
res/menu

添加menu资源文件夹

res > 右键添加资源文件夹 > 类型 menu

添加menu文件

res > menu > 右键添加menu资源文件


Activity

onCreateOptionsMenu

在activity创建的时候创建menu,还有一个是onPrepareOptionsMenu每次点击菜单键就创建菜单, 主要用于菜单会更新的情况

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.menu_main, menu);
    return super.onCreateOptionsMenu(menu);
}
override fun onCreateOptionsMenu(menu: Menu?): Boolean {
    menuInflater.inflate(R.menu.menu_main, menu)
    return super.onCreateOptionsMenu(menu)
}

菜单项点击事件

override fun onOptionsItemSelected(item: MenuItem?): Boolean {
    when(item?.itemId){
        R.id.menu_main_add -> 
        	showSnackBar(mBinding.bookContent, "menu add")
        R.id.menu_main_close -> finish()
    }
    return super.onOptionsItemSelected(item)
}