就像材料设计一样,顶部工具栏菜单+ BottomAppBar菜单+ BottomNavigationDrawerFragment

时间:2018-09-25 22:46:09

标签: android android-toolbar android-menu android-navigation-drawer android-bottomappbar

我想要实现的效果就像这张图片( 虽然没有顶部NavigationView ),但是带有Toolbar菜单+ BottomAppBar菜单+ BottomNavigationDrawerFragment类似于材料设计:

enter image description here

我可以通过BottomAppBarMy 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,菜单项将无法处理或显示。

我测试过的东西是:

  • 听起来可能很荒谬,但ToolbarToolbar都使用了两个setSupportActionBar(bottomAppbar)
  • 甚至尝试通过setSupportActionBar()方法向两个菜单充气,但没有一个起作用。

问题是,我们如何才能将顶部Toolbar菜单+ BottomAppBar菜单+ onCreateOptionsMenu()一起使用?

有什么想法吗?

1 个答案:

答案 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
}