Top Toolbar Menu + BottomAppBar Menu + BottomNavigationDrawerFragment 就像Material设计
Top Toolbar Menu + BottomAppBar Menu + BottomNavigationDrawerFragment Just like Material Design
我想要实现的就像这个图像(没有顶部NavigationView
虽然)但是Toolbar
菜单 + BottomAppBar
菜单 + BottomNavigationDrawerFragment
完全像 material 设计:
我可以通过 replace()
(My Answer) 管理 BottomAppBar
菜单:
val bottomBar = findViewById<BottomAppBar>(R.id.bottomAppBar)
bottomBar.replaceMenu(R.menu.menu_main)
这允许我为 BottomAppBar
扩展菜单并使用下面的代码加上 onCreateOptionsMenu()
用于 Toolbar
菜单和 setSupportActionBar()
:
val toolbar = findViewById<Toolbar>(R.id.myToolbar)
setSupportActionBar(toolbar)
重点是,在这个tutorial中(比如),他用setSupportActionBar(bottom_app_bar)
来设置SupportActionBar
在 BottomAppBar
上。因此,如果我们对 BottomAppBar
使用 setSupportActionBar(bottom_app_bar)
,它将显示 BottomNavigationDrawerFragment
+ 菜单 在底部可处理。
但是,Toolbar
和菜单呢? Toolbar
如果我们使用 [=31=,+ 菜单项将无法处理或显示].
我测试过的东西是:
- 可能听起来很荒谬,但是
Toolbar
和 BottomAppBar
都使用了两个 setSupportActionBar()
- 甚至尝试通过
onCreateOptionsMenu()
方法膨胀两个菜单,但 none 有效。
问题是,怎么才能把Top Toolbar
Menu + BottomAppBar
Menu + BottomNavigationDrawerFragment
都放在一起呢?
有什么想法吗?
希望我找到了答案。因此,如果我们要创建这样的布局(无顶部 NavigationDrawer
- view
),步骤如下:
照常声明 Toolbar
:
val toolbar = findViewById<Toolbar>(R.id.myToolbar)
setSupportActionBar(toolbar)
使用顶部 Toolbar
菜单覆盖 onCreateOptionsMenu
:
override fun onCreateOptionsMenu(menu: Menu?): Boolean {
menuInflater.inflate(R.menu.top_menu, menu)
return super.onCreateOptionsMenu(menu)
}
使用以下内容处理 BottomBar
菜单并在应用程序底部替换新的 Menu
并在选择 NavigationIcon
时显示 BottomSheetFragment
:
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
}
我想要实现的就像这个图像(没有顶部NavigationView
虽然)但是Toolbar
菜单 + BottomAppBar
菜单 + BottomNavigationDrawerFragment
完全像 material 设计:
我可以通过 replace()
(My Answer) 管理 BottomAppBar
菜单:
val bottomBar = findViewById<BottomAppBar>(R.id.bottomAppBar)
bottomBar.replaceMenu(R.menu.menu_main)
这允许我为 BottomAppBar
扩展菜单并使用下面的代码加上 onCreateOptionsMenu()
用于 Toolbar
菜单和 setSupportActionBar()
:
val toolbar = findViewById<Toolbar>(R.id.myToolbar)
setSupportActionBar(toolbar)
重点是,在这个tutorial中(比如),他用setSupportActionBar(bottom_app_bar)
来设置SupportActionBar
在 BottomAppBar
上。因此,如果我们对 BottomAppBar
使用 setSupportActionBar(bottom_app_bar)
,它将显示 BottomNavigationDrawerFragment
+ 菜单 在底部可处理。
但是,Toolbar
和菜单呢? Toolbar
如果我们使用 [=31=,+ 菜单项将无法处理或显示].
我测试过的东西是:
- 可能听起来很荒谬,但是
Toolbar
和BottomAppBar
都使用了两个 - 甚至尝试通过
onCreateOptionsMenu()
方法膨胀两个菜单,但 none 有效。
setSupportActionBar()
问题是,怎么才能把Top Toolbar
Menu + BottomAppBar
Menu + BottomNavigationDrawerFragment
都放在一起呢?
有什么想法吗?
希望我找到了答案。因此,如果我们要创建这样的布局(无顶部 NavigationDrawer
- view
),步骤如下:
照常声明 Toolbar
:
val toolbar = findViewById<Toolbar>(R.id.myToolbar)
setSupportActionBar(toolbar)
使用顶部 Toolbar
菜单覆盖 onCreateOptionsMenu
:
override fun onCreateOptionsMenu(menu: Menu?): Boolean {
menuInflater.inflate(R.menu.top_menu, menu)
return super.onCreateOptionsMenu(menu)
}
使用以下内容处理 BottomBar
菜单并在应用程序底部替换新的 Menu
并在选择 NavigationIcon
时显示 BottomSheetFragment
:
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
}