顶部工具栏菜单+ BottomAppBar菜单+ BottomNavigationDrawerFragment就像Material Design一样

ʍѳђ*_*ઽ૯ท 7 android android-menu navigation-drawer android-toolbar android-bottomappbar

我想要实现的就像这个图像(虽然没有顶部NavigationView)但Toolbar菜单+ BottomAppBar菜单+ BottomNavigationDrawerFragment完全像材料设计:

在此输入图像描述

我可以BottomAppBar通过replace()(我的答案)管理菜单:

val bottomBar = findViewById<BottomAppBar>(R.id.bottomAppBar)
bottomBar.replaceMenu(R.menu.menu_main)
Run Code Online (Sandbox Code Playgroud)

这让我膨胀的菜单为BottomAppBar以下代码加使用onCreateOptionsMenu()Toolbar菜单和setSupportActionBar():

val toolbar = findViewById<Toolbar>(R.id.myToolbar)
setSupportActionBar(toolbar)
Run Code Online (Sandbox Code Playgroud)

问题的关键是,在该教程(例如)时,他使用setSupportActionBar(bottom_app_bar)用于设置SupportActionBarBottomAppBar.所以,如果我们使用setSupportActionBar(bottom_app_bar)BottomAppBar,它会显示BottomNavigationDrawerFragment+菜单是在底侧handlable.

但是,Toolbar菜单怎么样? Toolbar如果我们使用,+菜单项将无法处理或显示setSupportActionBar(bottomAppbar).

我测试的东西是:

  • 可能听起来有些可笑,但用了两个setSupportActionBar()两个ToolbarBottomAppBar
  • 甚至尝试通过onCreateOptionsMenu()方法膨胀两个菜单但没有工作.

问题是,我们如何才能将Top ToolbarMenu + BottomAppBarMenu + BottomNavigationDrawerFragment全部放在一起?

有什么想法吗?

ʍѳђ*_*ઽ૯ท 6

希望我找到了答案.因此,如果我们想要创建这样的布局(没有顶部NavigationDrawer- view)以下是步骤:

Toolbar像往常一样宣布:

val toolbar = findViewById<Toolbar>(R.id.myToolbar)
setSupportActionBar(toolbar)
Run Code Online (Sandbox Code Playgroud)

onCreateOptionsMenu 使用顶级Toolbar菜单覆盖:

override fun onCreateOptionsMenu(menu: Menu?): Boolean {
    menuInflater.inflate(R.menu.top_menu, menu)
    return super.onCreateOptionsMenu(menu)
}
Run Code Online (Sandbox Code Playgroud)

使用以下方法处理BottomBar菜单并替换Menu应用程序底部的新内容并BottomSheetFragmentNavigationIcon选中时显示:

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
    }
Run Code Online (Sandbox Code Playgroud)

最后,覆盖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
}
Run Code Online (Sandbox Code Playgroud)