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)来设置SupportActionBarBottomAppBar 上。因此,如果我们对 BottomAppBar 使用 setSupportActionBar(bottom_app_bar),它将显示 BottomNavigationDrawerFragment + 菜单 在底部可处理。

但是,Toolbar 和菜单呢? Toolbar 如果我们使用 [=31=,+ 菜单项将无法处理或显示].

我测试过的东西是:

问题是,怎么才能把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
}