Navigation Component, how to show a normal UP/back button instead of hamburger icon in Navigation Drawer(导航组件,如何在导航抽屉中显示正常的向上/向后按钮,而不是汉堡图标)
问题描述
我的活动中有三个顶级目标片段:
appBarConfiguration = AppBarConfiguration(
setOf(
R.id.trackerFragment,
R.id.nutrientFragment,
R.id.settingsFragment
),
drawerLayout
)
这意味着所有这些片段都将显示汉堡按钮,而不是普通的向后箭头。问题是,我的应用程序中有一个&转到营养&按钮,可以导航到NutrientFragment,这是一个顶级目的地。我希望此片段在使用抽屉导航时仍显示汉堡包图标,但在导航到营养素按钮时显示正常的后退/向上按钮。
我最初的想法是在导航到NutrientFragment
时将布尔值作为参数传递,在onCreateView()
中,根据布尔值的值,删除汉堡图标或添加Back按钮。但这似乎有点丑陋和低效,特别是如果我在未来添加更多可能有同样问题的目的地。我也不知道如何删除汉堡图标并替换为普通的后退按钮。有没有关于如何实施的想法?我找到的所有答案要么是用旧的过时Java代码编写的,要么不完全是我要找的。
谢谢。
推荐答案
我设法找到了解决方案。我将此变量添加到MainActivity:
// If true, disable drawer and enable back/up button
private var isUpButton = false
和这些方法:
// Disable drawer and enable the up button
fun useUpButton() {
supportActionBar?.setHomeAsUpIndicator(
androidx.appcompat.R.drawable.abc_ic_ab_back_material
)
drawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED)
isUpButton = true
}
// Enable the drawer and disable up button
private fun useHamburgerButton() {
drawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED)
isUpButton = false
}
useUpButton()用默认的向上图标替换汉堡图标,锁定抽屉滑块并将isUpButton设置为true。我还覆盖了On OptionsItemsSelected:
// If isUpButton is true, and the home button is clicked, navigate up and
// enable drawer again, if false, just normal drawer behaviour
override fun onOptionsItemSelected(item: MenuItem): Boolean {
return if (isUpButton && item.itemId == android.R.id.home) {
navController.navigateUp()
useHamburgerButton()
true
} else super.onOptionsItemSelected(item)
}
因此,如果单击主页按钮(汉堡图标或向上图标),并将isUpButton设置为true,则该活动将向上导航,就像正常的向上行为一样,并将isUpButton重置为false,以便其他片段可以再次使用该抽屉。
现在我需要做的就是使用这些方法来解决我的问题:我希望NutrientFragment仅在我没有使用抽屉导航到NutrientFragment时才显示向上按钮&q;。为此,我需要在nav_raph.xml上创建NutrientFragment目标的参数:<fragment
android:id="@+id/nutrientFragment"
android:name="com.example.elegantcalorietracker.ui.fragments.NutrientFragment"
android:label="@string/nutrients"
tools:layout="@layout/fragment_nutrient">
<action
android:id="@+id/action_nutrientFragment_to_trackerFragment"
app:destination="@id/trackerFragment" />
<argument
android:name="upButtonNeeded"
android:defaultValue="false"
app:argType="boolean" />
并将此代码添加到NutrientFragment的onCreateView()方法:
upButtonNeeded = arguments?.getBoolean("upButtonNeeded") ?: false
if (upButtonNeeded) {
(activity as MainActivity).useUpButton()
}
现在,如果我在导航到NutrientFragment的另一个片段中有一个按钮,我所需要做的就是将true作为参数传递给导航方法:
val argument = bundleOf("upButtonNeeded" to true)
this@TrackerFragment
.findNavController()
.navigate(
R.id.action_trackerFragment_to_nutrientFragment,
argument
)
结果:
使用抽屉导航到NutrientFragment时,汉堡包图标正常显示,但是当以另一种方式导航(如按钮)时,向上按钮显示为:
这篇关于导航组件,如何在导航抽屉中显示正常的向上/向后按钮,而不是汉堡图标的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:导航组件,如何在导航抽屉中显示正常的向上/向后按钮,而不是汉堡图标
基础教程推荐
- 如何让对象对 Cocos2D 中的触摸做出反应? 2022-01-01
- Kivy Buildozer 无法构建 apk,命令失败:./distribute.sh -m “kivy"d 2022-01-01
- 当从同一个组件调用时,两个 IBAction 触发的顺序是什么? 2022-01-01
- UIWebView 委托方法 shouldStartLoadWithRequest:在 WKWebView 中等效? 2022-01-01
- Android:对话框关闭而不调用关闭 2022-01-01
- 如何在 iPhone 上显示来自 API 的 HTML 文本? 2022-01-01
- 在 gmail 中为 ios 应用程序检索朋友的朋友 2022-01-01
- android 应用程序已发布,但在 google play 中找不到 2022-01-01
- 如何在 UIImageView 中异步加载图像? 2022-01-01
- 如何在没有IB的情况下将2个按钮添加到右侧的UINavigationbar? 2022-01-01