[Android] Navigation componentのツールバーの戻るを制御する

2020.07.07

はじめに

Navigation componentでDrawerとToolbar連動したときに、どこに遷移しても戻るボタンに変わってしまい、どのページでもDrawerをメニューを開きたいときがありますよね。

Drawerから遷移するとバックボタンになってしまう

ハンバーガーアイコンをDrawerから遷移してもハンバーガーのままでいてほしい

今日はその設定の小ネタです。

基本的なNavigation componentのセットアップは公式ドキュメントを参照。

設定の仕方

プロジェクの全体のサンプルは以下を参照

AppBarConfigurationを設定する際にtopLevelDestinationIdsを設定することができます。これをNavigation Graphを設定するとstartDestinationで設定したもののみハンバーガーアイコンが表示されます。遷移後もDrawerメニューを表示したいときは、表示したいDestinationを指定することができます。

class MainActivity : AppCompatActivity(R.layout.activity_main) {
  override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)


    val navController = findNavController((R.id.nav_host_fragment))

    // トップレベルを設定することで、設定したものはハンバーガーアイコンをだす
    val appBarConfiguration = AppBarConfiguration(setOf(R.id.menu1, R.id.menu2, R.id.menu3), drawer_layout)
    
    // トップレベルがスタートにあたっているものだけなので、どこかに遷移するとすべてバックボタン
    // val appBarConfiguration = AppBarConfiguration(navController.graph, drawer_layout)

    nav_view.setupWithNavController(navController)
    toolbar.setupWithNavController(
      navController,
      appBarConfiguration
    )
  }
}

あとがき

僕はこれで少しハマりましたので備忘録として。