為了不顯示標題欄,所以主題使用了 NoActionBar,這也直接導致選項菜單無處顯示,添加一個ToolBar,自定義標題欄。添加menu資源文件夾,添加menu文件,在activity創建的時候創建menu,重載onCreateOptionsMenu,添加菜單項點擊事件onOptionsItemS... ...
菜單無法顯示
為了不顯示標題欄,所以主題使用了 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)
}