7

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

在此处输入图像描述

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

val bottomBar = findViewById<BottomAppBar>(R.id.bottomAppBar)
bottomBar.replaceMenu(R.menu.menu_main)

这使我可以为以下代码添加菜单BottomAppBar和使用以下代码以及onCreateOptionsMenu()菜单ToolbarsetSupportActionBar()

val toolbar = findViewById<Toolbar>(R.id.myToolbar)
setSupportActionBar(toolbar)

重点是,在本教程例如)中,他用于setSupportActionBar(bottom_app_bar)设置SupportActionBar. BottomAppBar因此,如果我们使用setSupportActionBar(bottom_app_bar)BottomAppBar它将显示BottomNavigationDrawerFragment+ 菜单在底部是可处理的。

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

我测试过的东西是:

  • 可能听起来很荒谬,但两者都使用了setSupportActionBar()两个ToolbarBottomAppBar
  • 甚至试图通过onCreateOptionsMenu()方法膨胀两个菜单,但没有奏效。

问题是,我们如何才能同时拥有顶级Toolbar菜单 +BottomAppBar菜单 +BottomNavigationDrawerFragment全部?

有什么想法吗?

4

1 回答 1

9

希望我找到了答案。因此,如果我们要创建这样的布局(没有顶部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替换新菜单并在选择时显示:MenuBottomSheetFragmentNavigationIcon

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
}
于 2018-09-27T19:07:51.813 回答