android - Android Fragment Navigation 自定义导航返回按钮
问题描述
我需要导航一堆片段,我正在使用工具栏的后退按钮导航回来。我可以覆盖按下的后退按钮以设置自定义动画,例如滑出吗?
这是工具栏的代码。
private fun setupToolbar() {
val appBarConfiguration = AppBarConfiguration(navController.graph, drawer_layout)
val toolbar = toolbar as Toolbar
setSupportActionBar(toolbar)
toolbar.setupWithNavController(navController, appBarConfiguration)
val ab: ActionBar? = supportActionBar
ab?.setDisplayShowTitleEnabled(false) // disable the default title element here (for centered title)
setupSearchQueryListener()
}
解决方案
在您的设置代码中,还需要做一件事:
toolbar.setNavigationOnClickListener {
onBackPressedDispatcher.onBackPressed()
}
在您的片段中,您可以这样做:
protected lateinit var backPressedCallback: OnBackPressedCallback
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
backPressedCallback = requireActivity().onBackPressedDispatcher.addCallback(this) {
// your code
}
}
以上将使您能够统一拦截向后导航并执行有问题的代码(您甚至可以通过玩backPressedCallback.isEnabled
标志来阻止/解除阻止)。以上经过测试。说到设置导航动画,我只是在玩基于 xml 定义的基于动作的动画:
<action
android:id="@+id/toYourDest"
app:destination="@+id/yourDest"
app:enterAnim="@anim/your_slide_in_right"
app:exitAnim="@anim/your_slide_out_left"
app:popEnterAnim="@anim/your_slide_in_left"
app:popExitAnim="@anim/your_slide_out_right" />
推荐阅读
- c - Char 数组似乎覆盖了其他数据
- vim - 如何在 Vim 中取消映射反斜杠?
- php - 我可以将按钮单击请求从 js 发送到 php
- electron - 如何在 Electron 中使用 contextBridge 创建 contextMenu(右键菜单)
- python - Tkinter 每 x 秒更新一次标签图像
- node.js - Windows中wsl bash终端上的Nodejs访问问题
- javascript - Javascript | 过滤嵌套数组
- javascript - 无法访问 Vuex 模块获取器 - 无法读取未定义的属性“获取器””
- php - Nginx 权限被拒绝 CentOS
- c# - C# SerialPort 写入行为不同的调试与运行时