我想要实现的效果就像这张图片( 虽然没有顶部NavigationView
),但是带有Toolbar
菜单+ BottomAppBar
菜单+ BottomNavigationDrawerFragment
类似于材料设计:
我可以通过BottomAppBar
(My Answer)管理replace()
菜单:
val bottomBar = findViewById<BottomAppBar>(R.id.bottomAppBar)
bottomBar.replaceMenu(R.menu.menu_main)
这允许我为BottomAppBar
扩展菜单,并在下面的代码中加上onCreateOptionsMenu()
的{{1}}菜单和Toolbar
:
setSupportActionBar()
要点是,在此tutorial中(例如, ),他使用val toolbar = findViewById<Toolbar>(R.id.myToolbar)
setSupportActionBar(toolbar)
在{ {1}}。因此,如果我们将setSupportActionBar(bottom_app_bar)
用作SupportActionBar
,它将显示BottomAppBar
+菜单可以在底部操作。
但是,setSupportActionBar(bottom_app_bar)
和菜单呢? BottomAppBar
+如果我们使用BottomNavigationDrawerFragment
,菜单项将无法处理或显示。
我测试过的东西是:
Toolbar
和Toolbar
都使用了两个setSupportActionBar(bottomAppbar)
setSupportActionBar()
方法向两个菜单充气,但没有一个起作用。 问题是,我们如何才能将顶部Toolbar
菜单+ BottomAppBar
菜单+ onCreateOptionsMenu()
一起使用?
有什么想法吗?
答案 0 :(得分:6)
希望我找到了答案。因此,如果我们要创建这样的布局(无顶部NavigationDrawer
-view
),请按照以下步骤操作:
照常声明Toolbar
:
val toolbar = findViewById<Toolbar>(R.id.myToolbar)
setSupportActionBar(toolbar)
使用顶部onCreateOptionsMenu
菜单覆盖Toolbar
:
override fun onCreateOptionsMenu(menu: Menu?): Boolean {
menuInflater.inflate(R.menu.top_menu, menu)
return super.onCreateOptionsMenu(menu)
}
使用以下内容处理BottomBar
菜单,并在应用程序底部替换新的Menu
,并在选择BottomSheetFragment
时显示NavigationIcon
:
val bottomBar = findViewById<BottomAppBar>(R.id.bottomAppBar)
bottomBar.replaceMenu(R.menu.bottom_menu)
bottomBar.setNavigationOnClickListener {
val bottomNavDrawerFragment = BottomNavigationDrawerFragment()
bottomNavDrawerFragment.show(supportFragmentManager, bottomNavDrawerFragment.tag)
}
bottomBar.setOnMenuItemClickListener { menuItem ->
when (menuItem.itemId) {
R.id.search_Action ->{
Toast.makeText(this@MainActivity, "Clicked", Toast.LENGTH_LONG).show()
}
}
true
}
最后,覆盖onOptionsItemSelected()
:
override fun onOptionsItemSelected(item: MenuItem?): Boolean {
when (item!!.itemId) {
R.id.action_settings -> {
startActivity(Intent(this@MainActivity, SettingsActivity::class.java))
}
R.id.changeView -> {
toast("Test")
}
}
return true
}