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时,汉堡包图标正常显示,但是当以另一种方式导航(如按钮)时,向上按钮显示为:
这篇关于导航组件,如何在导航抽屉中显示正常的向上/向后按钮,而不是汉堡图标的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:导航组件,如何在导航抽屉中显示正常的向上/向后按钮,而不是汉堡图标
- Android - 我如何找出用户有多少未读电子邮件? 2022-01-01
- 想使用ViewPager,无法识别android.support.*? 2022-01-01
- 使用自定义动画时在 iOS9 上忽略 edgesForExtendedLayout 2022-01-01
- 在测试浓缩咖啡时,Android设备不会在屏幕上启动活动 2022-01-01
- 如何检查发送到 Android 应用程序的 Firebase 消息的传递状态? 2022-01-01
- Android viewpager检测滑动超出范围 2022-01-01
- Android - 拆分 Drawable 2022-01-01
- MalformedJsonException:在第1行第1列路径中使用JsonReader.setLenient(True)接受格式错误的JSON 2022-01-01
- 用 Swift 实现 UITextFieldDelegate 2022-01-01
- android 4中的android RadioButton问题 2022-01-01