Her*_*man 3 android android-navigation android-architecture-navigation
我正在关注 Codelab https://developer.android.com/codelabs/kotlin-android-training-add-navigation/index.html#9,并使用以下代码来连接抽屉:
class MainActivity : AppCompatActivity() {
private lateinit var drawerLayout : DrawerLayout
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
@Suppress("UNUSED_VARIABLE")
val binding = DataBindingUtil.setContentView<ActivityMainBinding>(this, R.layout.activity_main)
drawerLayout = binding.drawerLayout
val navController = findNavController(R.id.myNavHostFragment)
// To support up action and also the title, the third parameter is optional and is used
// for the hamburger menu for drawer.
NavigationUI.setupActionBarWithNavController(this, navController, drawerLayout)
// show the navigation drawer
NavigationUI.setupWithNavController(binding.navView, navController)
}
override fun onSupportNavigateUp(): Boolean {
val navController = findNavController(R.id.myNavHostFragment)
// this is for the hamburger menu
return NavigationUI.navigateUp(navController, drawerLayout)
}
}
Run Code Online (Sandbox Code Playgroud)
当显示初始片段时,汉堡包将按预期显示:
但是,当我从抽屉中选择其中一项(例如“关于”)后,它就变成了后退/向上按钮:
如何继续使用汉堡按钮而不是将其更改为向上按钮?
Codelab 的完整代码位于:https://github.com/google-developer-training/android-kotlin-fundamentals-apps/tree/master/AndroidTriviaNavigation
\n\n\n
NavigationUI使用AppBarConfiguration 对象来管理应用程序显示区域左上角的导航按钮的行为。导航按钮\xe2\x80\x99 的行为会根据用户是否位于顶级目的地而变化。顶级目标是一组分层相关目标中的根或最高级别目标。顶级目标不会在顶部应用栏中显示向上按钮,因为没有更高级别的目标。默认情况下,应用程序的启动目的地是唯一的顶级目的地。
\n当用户位于顶级目的地时,如果该目的地使用 DrawerLayout,则导航按钮将变为抽屉图标。如果目标不使用 DrawerLayout,则导航按钮将被隐藏。当用户位于任何其他目的地时,导航按钮将显示为向上按钮。
\n
因此,如果您希望抽屉图标出现在多个目标上,而不仅仅是起始目标上,则需要创建一个AppBarConfiguration对象,其中包含您希望成为顶级目标的目标:
// Use the IDs from your navigation graph\nval appBarConfiguration = AppBarConfiguration(\n setOf(R.id.rulesFragment, R.id.aboutFragment),\n drawerLayout)\nRun Code Online (Sandbox Code Playgroud)\n因此,您的代码将变为:
\nclass MainActivity : AppCompatActivity() {\n\n private lateinit var appBarConfiguration : AppBarConfiguration\n\n override fun onCreate(savedInstanceState: Bundle?) {\n super.onCreate(savedInstanceState)\n @Suppress("UNUSED_VARIABLE")\n val binding = DataBindingUtil.setContentView<ActivityMainBinding>(this, R.layout.activity_main)\n // Use the Kotlin extension in navigation-ui-ktx to create\n // the AppBarConfiguration\n appBarConfiguration = AppBarConfiguration(\n setOf(R.id.rulesFragment, R.id.aboutFragment),\n binding.drawerlayout)\n\n val navController = findNavController(R.id.myNavHostFragment)\n // To support up action and also the title, the third parameter is optional and is used\n // for the hamburger menu for drawer.\n NavigationUI.setupActionBarWithNavController(this, navController, appBarConfiguration)\n\n // show the navigation drawer\n NavigationUI.setupWithNavController(binding.navView, navController)\n }\n\n override fun onSupportNavigateUp(): Boolean {\n val navController = findNavController(R.id.myNavHostFragment)\n\n // this is for the hamburger menu\n return NavigationUI.navigateUp(navController, appBarConfiguration)\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
920 次 |
| 最近记录: |