如何解决单击抽屉后如何继续显示汉堡包图标而不是备份/备份图标?
我正在关注代码实验室 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)
}
}
显示初始片段时,汉堡按预期显示:
但是,在我从抽屉中选择了其中一项之后,例如关于,它变成了一个后退/向上按钮:
如何继续使用汉堡按钮而不是将其更改为向上按钮?
代码实验室的完整代码在这里:https://github.com/google-developer-training/android-kotlin-fundamentals-apps/tree/master/AndroidTriviaNavigation
解决方法
我认为如果你在你的 navdrawer_menu.xml 文件中添加布局,汉堡图标将保留
,根据AppBarConfiguration documentation:
NavigationUI
使用 AppBarConfiguratio
n 对象来管理应用显示区域左上角导航按钮的行为。导航按钮的行为会根据用户是否位于顶级目的地而发生变化。
顶级目的地是一组分层相关目的地中的根或最高级别目的地。顶级目的地不会在顶部应用栏中显示向上按钮,因为没有更高级别的目的地。 默认情况下,您应用的起始目的地是唯一的顶级目的地。
当用户位于顶级目的地时,如果目的地使用 DrawerLayout,导航按钮将成为抽屉图标。如果目标不使用 DrawerLayout,导航按钮将被隐藏。当用户在任何其他目的地时,导航按钮显示为向上按钮。
因此,如果您想让 Drawer 图标出现在多个目的地而不仅仅是开始目的地,您需要创建一个 AppBarConfiguration
对象,其中包含您希望成为顶级目的地的目的地:
// Use the IDs from your navigation graph
val appBarConfiguration = AppBarConfiguration(
setOf(R.id.rulesFragment,R.id.aboutFragment),drawerLayout)
因此,您的代码变为:
class MainActivity : AppCompatActivity() {
private lateinit var appBarConfiguration : AppBarConfiguration
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
@Suppress("UNUSED_VARIABLE")
val binding = DataBindingUtil.setContentView<ActivityMainBinding>(this,R.layout.activity_main)
// Use the Kotlin extension in navigation-ui-ktx to create
// the AppBarConfiguration
appBarConfiguration = AppBarConfiguration(
setOf(R.id.rulesFragment,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,appBarConfiguration)
// 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,appBarConfiguration)
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。