Android 13 的版本里 Android 就针对返回导航进行了大量更改,包括:
- 废弃原有的
KEYCODE_BACK
KeyEvent - 提供 Manifest 属性
enableOnBackInvokedCallback
以配置是否应用全新的 Back 导航特性 - 提供 Activity、Dialog 里处理 Back 导航的
OnBackInvokedDispatcher
入口 - 提供自定义 Back 导航逻辑的
OnBackInvokedCallback
回调 - 引入 Back 导航触发前目标界面的预览
具体的,可以查看笔者当时写的文章:Android 13 返回导航大变更:返回键彻底废弃 + 可预见型返回手势。
支持预览目标界面
写上述文章时系统尚处于 13 beta 阶段,笔者并未看到 5 对应的 Back 预览效果,并以为 13 的最终版会实现该特性。但事实上直到 13 正式发布,该特性都没有到来,甚至是 14 beta 版都还没有正式发布。
我们先来简单回顾一下全新的 Back 导航的适配方式:
- 开启
enableOnBackInvokedCallback
属性。
<application
...
android:enableOnBackInvokedCallback="true"
... >
</application>
- 就是应用新的 back 相关 API,具体逻辑不赘述了。
class Activity ... {
private var onBackInvokedCallback: OnBackInvokedCallback? = null
override fun onCreate(savedInstanceState: Bundle?) {
...
if (BuildCompat.isAtLeastT()) {
onBackInvokedCallback = OnBackInvokedCallback {
onBackEvent()
}.also {
onBackInvokedDispatcher.registerOnBackInvokedCallback(
OnBackInvokedDispatcher.PRIORITY_DEFAULT,
it
)
}
}
}
override fun onDestroy() {
super.onDestroy()
if (BuildCompat.isAtLeastT()) {
onBackInvokedCallback?.let {
onBackInvokedDispatcher.unregisterOnBackInvokedCallback(it)
}
}
}
}
然后在 14 上运行试下,可以看到并没有返回预览效果:
经过查阅,发现了官方的一些解释:
在 Android 13 中,我们为手机、大屏设备和可折叠设备等 Android 设备引入了预测性返回手势。该功能的发布历程跨度将达多年;在完全实现后,该功能可让用户在完全完成某个返回手势之前就能预览此手势完成后的目的地或其他结果,以便用户能够决定是继续完成手势还是留在当前视图中。
可以理解,这个功能的实现比较复杂,对系统全局的影响颇大,如何开放、开放什么样的返回预览 API 给 App 都需要研究、尝试,所以 13 没有发布,14 是否能发布,也比较悬。
但官方提示其实可以在开发者选项中体验下开发中的返回预览效果:
- 设置 > 系统 > 开发者选项 > 预测性返回手势动画(Predictive back animation)
13 上是找不到该选项的,14 上可以找到:
开启之后,再执行 back 导航,可以看到返回的预览效果:
但是返回视图里的箭头 icon 突然不见了,说明该功能还在开发当中,14 正式版是否能够开发完毕,还需要时间。
全新的返回箭头
13 及以前的返回效果是比较简单的,只有一个依据 touch 角度、速度变化的箭头。
为了突出箭头的显示,能让用户更加清晰地看到箭头的出现、返回的触发,14 上给箭头添加了背景、边框。
甚至还支持该箭头依据设备 Theme 进行变化,能更好地融入系统 UI。
比如我们将 theme 的 basic color 改为绿色。
再看一下箭头的新效果:
结语
在支持预览返回的目标界面功能之前,确实非常有必要借助返回箭头来提示返回手势的进度。但一旦这个预览功能开发完毕,这个箭头则显得不那么必须,因为判断目标界面出现的多少即可,就像 iOS 那样。
但话说回来,这个箭头并不需要 App 适配样式,全部由系统的 SystemUI 完成,不会增加开发者的负担。所以,提供依据系统 Theme 改变的返回箭头算是 Android 返回导航的一大特色。
期待包括预览目标画面功能在内的完整 Back 导航功能早日发布!