当前位置: 首页 > article >正文

Android13新特性之预测返回手势

Android14新特性之预测返回手势

简介

Android 14引入了对预测性返回手势的支持,这意味着开发者可以通过系统提供的额外动画和API来实现定制化的动画效果。这一更新使得应用程序可以在用户执行返回手势时展示一个动画预览,例如在应用程序前显示Home屏幕的动画效果。为了支持预测性返回手势,开发者需要更新他们的应用程序,并使用向后兼容的OnBackPressedCallback AppCompat 1.6.0-alpha05(AndroidX)或更高版本的API,或者使用新的OnBackInvokedCallback平台API。这个更新为应用程序提供了迁移路径,以便正确拦截返回导航,其中包括使用新的系统返回API替换旧的方法。虽然在Android 13中,预测性返回手势对用户不可见,但作为开发者选项提供了一个早期版本的用户界面供测试。另外,虽然KeyEvent.KEYCODE_BACK并没有被弃用,但是不再支持从KeyEvent.KEYCODE_BACK拦截返回事件,开发者应当注意这一点并做出相应的调整。这些更新的目的是为了增强用户体验,为开发者提供更多定制动画的可能性,并确保应用程序能够跟上最新的系统功能。

更新app以支持默认返回导航

在更新应用程序以支持默认返回导航时,如果应用程序没有实现任何自定义的后退行为,即依赖系统处理后退操作,那么更新过程非常简单直接。只需要按照指南中提供的步骤选择启用此功能即可。另外,如果应用程序中使用了Fragments或Navigation组件,还需要将AndroidX Activity升级至1.6.0-alpha05或更高版本以确保兼容性。

更新app支持自定义返回导航

而对于已经实现了自定义后退行为的应用程序,更新则需要考虑不同的迁移路径。这取决于应用程序是否使用了AndroidX以及如何处理后退导航。针对这种情况,开发者需要仔细评估现有的自定义后退行为,并根据具体情况选择合适的迁移方式,以确保应用程序能够顺利适配新的系统功能并保持稳定性。通过清晰的迁移计划和适当的更新步骤,开发者可以有效地将应用程序升级到支持最新特性的版本,提升用户体验并保持应用的竞争力。

迁移 AndroidX 的后退导航实现是一种常见且推荐的做法。这适用于已经使用 OnBackPressedDispatcher 进行自定义手势导航处理的新应用程序或现有应用程序。如果您的应用符合这一情况,请按照以下步骤添加对预测性后退手势的支持:

  1. 确保已经使用了OnBackPressedDispatcherAPI(例如 Fragments 和 Navigation Component)的 API 与预测性后退手势无缝配合工作,需将其升级到 AndroidX Activity 1.6.0-alpha05
// 在您的 build.gradle 文件中:
dependencies {
    // 除其他依赖项外添加以下依赖
    implementation "androidx.activity:activity:1.6.0-alpha05"
}
  1. 将包含不受支持的后退导航 API 的 AndroidX 应用迁移到 AndroidX API。如果您的应用使用了 AndroidX 库,但实现或引用了不支持的后退导航 API,则需要迁移到使用 AndroidX API 以支持新行为。

  2. 将不受支持的 API 迁移到 AndroidX API,具体步骤如下:

    • 将系统后退处理逻辑迁移到 AndroidX 的 OnBackPressedDispatcher,并使用 OnBackPressedCallback 进行实现。有关详细指导,请参见“提供自定义后退导航”。
    • 当准备好停止拦截后退手势时,禁用 OnBackPressedCallback,通过 OnBackPressedKeyEvent.KEYCODE_BACK 停止拦截后退事件。
    • 确保升级到 AndroidX Activity 1.6.0-alpha05
  3. 成功迁移应用程序后,可以选择加入预测性后退手势,以查看返回主屏幕的系统动画。

  4. 如果您的应用程序无法使用 AndroidX 库,并且改为使用不受支持的 API 实现或引用自定义后退导航,则必须迁移到 OnBackInvokedCallback 平台 API。在运行 Android 13 或更高版本的设备上使用新的 OnBackInvokedCallback API,并依靠不受支持的 API 在运行 Android 12 或更低版本的设备上。

  5. 最后,对于 Android 13 及以上的设备,请通过 OnBackPressedKeyEvent.KEYCODE_BACK 停止拦截后退事件。

总之,迁移到 AndroidX 应用程序并支持更新的系统后退导航是一种推荐的做法,同时也将使您的应用能够使用许多其他有用的功能,每个版本都会自动更新 API,以节省您的工作和时间。

选择启用预测性返回手势

一旦您确定如何根据您的情况更新您的应用程序,就可以选择支持预测性返回手势。

要选择启用预测性返回手势,在 AndroidManifest.xml 文件中的 <application> 标签中将 android:enableOnBackInvokedCallback 标志设置为 true。

<application
    ...
    android:enableOnBackInvokedCallback="true"
    ... >
...
</application>

如果您不提供值,它将默认为 false 并执行以下操作:

禁用预测性返回手势系统动画。
忽略 OnBackInvokedCallback,但 OnBackPressedCallback 的调用仍将继续工作。

在Activity级别选择启用

从 Android 14 开始,android:enableOnBackInvokedCallback 标志使您可以选择在活动级别启用预测性系统动画。这种行为使得更容易将大型多活动应用程序迁移到预测性返回手势。

以下代码展示了如何使用 enableOnBackInvokedCallbackMainActivity 中启用返回主屏幕系统动画:

<manifest ...>
    <application . . .

        android:enableOnBackInvokedCallback="false">

        <activity
            android:name=".MainActivity"
            android:enableOnBackInvokedCallback="true"
            ...
        </activity>
        <activity
            android:name=".SecondActivity"
            android:enableOnBackInvokedCallback="false"
            ...
        </activity>
    </application>
</manifest>

在使用 android:enableOnBackInvokedCallback 标志时,请注意以下事项:

android:enableOnBackInvokedCallback=false 设置为在活动级别或应用程序级别关闭预测性返回动画,并指示系统忽略对 OnBackInvokedCallback 平台 API 的调用。但是,由于 OnBackPressedCallback 是向后兼容的并调用了不受支持的 onBackPressed API(在 Android 13 之前),因此 OnBackPressedCallback 的调用仍将继续运行。
在应用程序级别设置 enableOnBackInvokedCallback 标志会为应用程序中的所有活动建立默认值。您可以通过在活动级别设置标志来覆盖默认值,如上面的代码示例所示。

Callback的最佳实践

Callback的最佳实践包括以下几点:使用支持的系统回调(如 Compose 的 BackHandlerOnBackPressedCallback OnBackInvokedCallback)、确定启用和禁用每个回调的 UI 状态、将系统回调用于 UI 逻辑、创建单一职责的回调以及测试预测性后退手势动画。

在确定每个回调的 UI 状态时,建议使用可观察的数据持有类型(如 StateFlow 或 Compose State)定义该状态,并随着状态的变化启用或禁用回调。这种做法能够避免将后退逻辑与条件语句关联起来,从而避免在后退事件发生后才对其进行反应。

使用系统回调来运行 UI 逻辑,例如显示弹出窗口或运行动画。请勿仅创建回调以运行非 UI 逻辑。如果您只需要拦截后退事件以进行日志记录,请在 Activity 或 Fragment 生命周期内进行日志记录。

创建单一职责的回调可以让您将多个回调添加到调度程序中,并将每个回调与一个后退手势相关联。这样可以简化代码逻辑并提高代码质量。

最后,要注意测试预测性后退手势动画。在 Android 13 的最终版本中,您可以启用开发者选项来测试返回主屏幕动画。这样可以确保应用程序的用户体验得到最优化。


http://www.kler.cn/a/231746.html

相关文章:

  • SQL面试题——抖音SQL面试题 主播播出时长
  • 基于Java Springboot编程语言在线学习平台
  • 编写一个生成凯撒密码的程序
  • Failed to create a temp file - Jenkins 无法创建任务
  • 【Android】EventBus事件总线用法浅析
  • Javascript——设计模式(一)
  • next项目页面性能调优
  • json、jsonlines格式化显示
  • MySQL温故篇(一)SQL语句基础
  • GEE入门篇|栅格数据集概述(四):其他卫星产品
  • C语言笔试题之实现C库函数 strstr()(设置标志位)
  • k8s弃用docker后使用ctr导入镜像
  • Vue前端框架--Vue工程项目问题总结{脚手架 Vue-cli}
  • 【附代码】NumPy加速库NumExpr(大数据)
  • 【JavaScript】switch 语句
  • Quartus IP 之mif与hex文件创建与使用
  • Hive与Presto中的列转行区别
  • c实现顺序表
  • 解决IntellIJ Idea内存不足
  • 为电子表格嵌入数据库,Excel/WPS一键升级为管理系统
  • C++实现鼠标点击和获取鼠标位置(编译环境visual studio 2022)
  • 问题 | 开源软件的影响力
  • mybatis-plus循环处理多个条件的 or 查询
  • SQL,HQL刷题,尚硅谷
  • 【力扣】移动零,双指针法
  • 【开源】JAVA+Vue.js实现在线课程教学系统