当前位置: 首页 > 知识库问答 >
问题:

当不使用开始作为顶层导航时,如何配置抽屉导航按钮?

贺恩
2023-03-14

我使用导航图进行导航,并有一个开始屏幕(启动片段)作为显示的第一个片段。问题是,当我转到主片段/屏幕时,顶部的导航按钮显示回来,而不是抽屉图标。我们如何控制这一切?有哪些选择。如何更改起始目的地?(如有可能)

当用户位于顶级目的地时,如果目的地使用抽屉布局,则导航按钮将成为抽屉图标。如果目的地不使用抽屉布局,则隐藏导航按钮。当用户在任何其他目的地时,导航按钮显示为向上按钮。要仅使用开始目标作为顶级目标来配置导航按钮,请创建AppBarConfiguration对象,并传入相应的导航图,如下所示:

示例代码

我的问题是,当导航到下一个_片段时,后退按钮仍然存在。它应该显示菜单/汉堡包图标。

class MainActivity : AppCompatActivity() {

private lateinit var drawerLayout: DrawerLayout
private lateinit var appBarConfiguration : AppBarConfiguration

override fun onCreate(savedInstanceState: Bundle?) {

    super.onCreate(savedInstanceState)

    val binding = DataBindingUtil.setContentView<ActivityMainBinding>(this, R.layout.activity_main)
    drawerLayout = binding.drawerLayout

    val navController = this.findNavController(R.id.mainNavigationHostFragment)
    NavigationUI.setupActionBarWithNavController(this, navController)

    appBarConfiguration = AppBarConfiguration(setOf(R.id.nextFragment), drawerLayout) 
    NavigationUI.setupWithNavController(binding.mainNavigationDrawerView, navController)

    val navigationHeader = binding.mainNavigationDrawerView.getHeaderView(0)
    val iconButton = navigationHeader.findViewById<ImageButton>(R.id.main_nav_icon_button)
    

}

override fun onSupportNavigateUp(): Boolean {

    val navController = this.findNavController(R.id.mainNavigationHostFragment)
    return NavigationUI.navigateUp(navController, appBarConfiguration)
}

}

共有1个答案

洪永长
2023-03-14

而不是将导航图传递给AppbarConfiguration,传递应该显示汉堡图标的片段的id,这样当显示特定片段时,它会显示home/hamburger图标而不是back图标。

那就是

val appBarConfiguration=AppBarConfiguration(setOf(R. id.FAGMENT_THAT_SHOULD_SHOW_HOME_ICON),DRAWER_LAYOUT)

使现代化

而不是

val navController = this.findNavController(R.id.mainNavigationHostFragment)

NavigationUI.setupActionBarWithNavController(this, navController) 

 appBarConfiguration = AppBarConfiguration(setOf(R.id.nextFragment), drawerLayout) 
    NavigationUI.setupWithNavController(binding.mainNavigationDrawerView, navController)

val navigationHeader = binding.mainNavigationDrawerView.getHeaderView(0)
  val iconButton = navigationHeader.findViewById<ImageButton>(R.id.main_nav_icon_button)
    

只是

val navController = this.findNavController(R.id.mainNavigationHostFragment)

appBarConfiguration = AppBarConfiguration(setOf(R.id.nextFragment), drawerLayout) 
    

NavigationUI.setupActionBarWithNavController(this, navController, appBarConfiguration);

 类似资料:
  • 我正在开发一个android项目,我正在尝试使用来自http://developer.android.com/training/implementing-navigation/nav-drawer.html.的示例集成新的导航抽屉 它主要工作除了一件事,动作栏向上按钮不显示菜单,但如果我用手指从边缘滑动主活动屏幕,菜单就会出现,所以我知道实际菜单没有问题,它只是动作栏按钮。 下面是代码 感谢您提供

  • 我对Android开发相当陌生。我正在检查材料设计库,我已经实现了一个带有底部导航的抽屉菜单,可以轻松浏览片段。两个组件都很好,但我不知道如何协调两个组件的导航。例如,当一个片段在抽屉菜单上切换时,它会改变布局,但按钮导航选定的项目不会随之改变。 如何解决此问题,并将这两个组件链接起来,使其相互工作,并同步更改的选定项? 这是我的java文件的样子,下面是GitHub上整个项目的链接:https:

  • 我试图遵循谷歌最新的良好实践,用导航组件实现单个活动应用程序。 然而,在阅读了整个导航留档后,我仍然认为有很多情况下,他们没有解决。 例如,我应该如何实现以下情况: 应用程序在闪屏中启动。然后在加载后进入新闻片段。 注意:闪屏应该从后台弹出,因为它不应该再出现了。 然而,部分中的一些片段可以导航到一个新区域,该区域应该有一个后退按钮(而不是抽屉)。

  • 我有一个导航抽屉应用程序,我需要从应用程序的主屏幕开始。。我有一个问题,当我启动应用程序时,它总是从抽屉菜单的第一项活动开始。。我怎样才能使应用程序从主屏幕开始,主屏幕不在抽屉菜单中,而不是第一项活动!!! 主要活动 导航抽屉碎片 维护。xml 闪屏

  • 有人能告诉我如何创建活动到这个主要活动,导航抽屉将看到在所有他们?我需要使用这个特定的MainActivity代码。我不需要使用碎片,只要3个简单的活动将添加到这个抽屉。 NavDrawer布局:

  • 在我的片段中,我通过编程将片段添加到导航抽屉中,然后从右侧打开抽屉。注意,我无法直接访问抽屉布局的xml文件,因此需要一个编程解决方案。抽屉从右侧打开并正确关闭,我保留抽屉的打开/关闭状态,并在配置根据该状态更改后打开它。 问题是,在配置更改时,抽屉关闭(我可以看到抽屉动画到关闭状态),即使我根据保存的InstanceState布尔值恢复其打开/关闭状态。我在中的所有方法中放置了调试器,但它们没有