NoActionBar主题下如何添加OptionsMenu

泄露秘密 提交于 2020-07-29 06:38:50

菜单无法显示

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

解决方案

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

<androidx.appcompat.widget.Toolbar
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:id="@+id/main_menu_ebook"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintTop_toTopOf="parent"/>

以下为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资源文件

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <item
        android:id="@+id/menu_main_add"
        android:title="添加"
        android:icon="@android:drawable/ic_menu_add"
        app:showAsAction="never"/>
    <item android:id="@+id/menu_main_close"
        android:title="关闭"
        android:icon="@android:drawable/ic_menu_close_clear_cancel"
        app:showAsAction="never"/>
</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)
}
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!