Android13新特性之预测返回手势

news2024/11/22 16:55:37

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.coloradmin.cn/o/1445999.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Makefile编译原理 make 中的路径搜索_2

一.make中的路径搜索 VPATH变量和vpath关键字同时指定搜索路径。 实验1 VPATH 和 vpath 同时指定搜索路径 mhrubuntu:~/work/makefile1/18$ tree . ├── inc │ └── func.h ├── main.c ├── makefile ├── src1 │ └── func.c └── src2 └── func.c mak…

FRP内网穿透如何避免SSH暴力破解(二)——指定地区允许访问

背景 上篇文章说到&#xff0c;出现了试图反复通过FRP的隧道&#xff0c;建立外网端口到内网服务器TCP链路的机器人&#xff0c;同时试图暴力破解ssh。这些连接造成了流量的浪费和不必要的通信开销。考虑到服务器使用者主要分布在A、B、C地区和国家&#xff0c;我打算对上一篇…

万维网的文档

目录 1 万维网的文档 动态万维网文档 CGI CGI 网关程序 活动万维网文档 用 Java 语言创建活动文档 1 万维网的文档 分为&#xff1a; 静态万维网文档。内容不会改变。简单。(html、xml、css) 动态万维网文档。文档的内容由应用程序动态创建。 活动万维网文档。由浏览器端…

npm config set registry https://registry.npm.taobao.org 这个设置了默认的镜像源之后如何恢复默认的镜像源

要恢复npm默认的镜像源&#xff0c;你可以使用以下命令将registry设置回npm的官方源&#xff1a; npm config set registry https://registry.npmjs.org/这个命令会修改你的全局npm配置&#xff0c;将包的下载源改回npm官方的源。这样做之后&#xff0c;任何后续的npm install…

【二叉树】层序遍历

目录 层序遍历概念&结构 层序遍历的实现 整体思路 代码实现 图示理解 BT升级 整体思路 代码实现 图示理解​ 应用 题目 前序&中序&后序遍历&#xff1a;深度优先遍历dfs 层序遍历&#xff1a;广度优先遍历bfs 层序遍历概念&结构 层序遍历&#xf…

【java语言基础⑥】面向对象——面向对象的思想、类与对象

1.学习目标 了解面向对象的思想&#xff0c;能够说出面向对象的三个特性掌握类的定义&#xff0c;能够独立完成类的定义掌握对象的创建和使用&#xff0c;能够完成对象创建&#xff0c;用对象访问对象属性和方法掌握对象的引用传递&#xff0c;能够独立实现对象的引用传递熟悉…

力扣_字符串6—最小覆盖字串

题目 给你一个字符串 s 、一个字符串 t 。返回 s 中涵盖 t 所有字符的最小子串。如果 s 中不存在涵盖 t 所有字符的子串&#xff0c;则返回空字符串 “” 。 示例 &#xff1a; 输入&#xff1a;s “ADOBECODEBANC”, t “ABC” 输出&#xff1a;“BANC” 解释&#xff1a;…

Java安全 URLDNS链分析

Java安全 URLDNS链分析 什么是URLDNS链URLDNS链分析调用链路HashMap类分析URL类分析 exp编写思路整理初步expexp改进最终exp 什么是URLDNS链 URLDNS链是Java安全中比较简单的一条利用链&#xff0c;无需使用任何第三方库&#xff0c;全依靠Java内置的一些类实现&#xff0c;但…

mxxWechatBot主动发送消息至微信

大家好&#xff0c;我是雄雄&#xff0c;欢迎关注微信公众号&#xff1a;雄雄的小课堂。 免责声明&#xff1a;该工具仅供学习使用&#xff0c;禁止使用该工具从事违法活动&#xff0c;否则永久拉黑封禁账号&#xff01;&#xff01;&#xff01;本人不对任何工具的使用负责&am…

【Git版本控制 05】多人协作

目录 一、邀请开发用户 二、新建远程分支 三、拉取远程分支 四、推送远程分支 五、合并远程分支 六、多分支协作 一、邀请开发用户 在windows环境下&#xff0c;再clone同⼀个项⽬仓库&#xff0c;来模拟⼀起协作开发的另⼀名⼩伙伴。 际开发中&#xff0c;每个⽤⼾都有…

【Web】超级详细的Linux权限提升一站式笔记

目录 一、Linux内核提权 提权原理 提权环境 提权复现 二、SUID提权 SUID介绍 设置SUID SUID提权原理 查找SUID文件 提权介绍 find提权 bash提权 vim提权 python提权 三、计划任务提权 提权原理 提权环境 提权步骤 四、环境变量劫持提权 提权原理 提权环境…

【机器学习】卷积和反向传播

一、说明 自从 AlexNet 在 2012 年赢得 ImageNet 竞赛以来&#xff0c;卷积神经网络 (CNN) 就变得无处不在。从不起眼的 LeNet 到 ResNets 再到 DenseNets&#xff0c;CNN 无处不在。 您是否想知道 CNN 的反向传播中会发生什么&#xff0c;特别是反向传播在 CNN 中的工作原理。…

【知识整理】技术新人的培养计划

一、培养计划落地实操 1. 概要 新人入职&#xff0c;要给予适当的指导&#xff0c;目标&#xff1a; 1、熟悉当前环境&#xff1a; 生活环境&#xff1a;吃饭、交通、住宿、娱乐 工作环境&#xff1a;使用的工具&#xff0c;Mac、maven、git、idea 等 2、熟悉并掌握工作技…

Android---Jetpack Compose学习003

Compose 状态。本文将探索如何在使用 Jetpack Compose 时使用和考虑状态&#xff0c;为此&#xff0c;我们需要构建一个 TODO 应用&#xff0c;我们将构建一个有状态界面&#xff0c;其中会显示可修改的互动式 TODO 列表。 状态的定义。在科学技术中&#xff0c;指物质系统所处…

【C深度解剖】前置++与后置++

简介&#xff1a;本系列博客为C深度解剖系列内容&#xff0c;以某个点为中心进行相关详细拓展 适宜人群&#xff1a;已大体了解C语法同学 作者留言&#xff1a;本博客相关内容如需转载请注明出处&#xff0c;本人学疏才浅&#xff0c;难免存在些许错误&#xff0c;望留言指正 作…

相机图像质量研究(12)常见问题总结:光学结构对成像的影响--炫光

系列文章目录 相机图像质量研究(1)Camera成像流程介绍 相机图像质量研究(2)ISP专用平台调优介绍 相机图像质量研究(3)图像质量测试介绍 相机图像质量研究(4)常见问题总结&#xff1a;光学结构对成像的影响--焦距 相机图像质量研究(5)常见问题总结&#xff1a;光学结构对成…

关于Navicat导入sql文件后er图乱序问题

关于Navicat导入sql文件后er图乱序问题 具体操作如下&#xff1a; 点击左下角刷新旁边的小三角

涤生大数据实战:基于Flink+ODPS历史累计计算项目分析与优化(上)

涤生大数据实战&#xff1a;基于FlinkODPS历史累计计算项目分析与优化&#xff08;一&#xff09; 1.前置知识 ODPS&#xff08;Open Data Platform and Service&#xff09;是阿里云自研的一体化大数据计算平台和数据仓库产品&#xff0c;在集团内部离线作为离线数据处理和存…

数据结构(3) 顺序表存储结构

顺序表存储结构 存储结构顺序结构定义基本操作的实现静态分配问题 动态分配代码功能 顺序表的特点: 顺序表小结顺序表的插入删除插入删除小结 顺序表的查找按位查找按值查找小结 各位小伙伴想要博客相关资料的话关注公众号&#xff1a;chuanyeTry即可领取相关资料&#xff01; …

Codeforces Round 924 E. Modular Sequence

E. Modular Sequence 题意 对于一个长度为 n n n 的数组 a a a&#xff0c;定义它是 g o o d good good 的当且仅当&#xff1a; a 1 x a_1 x a1​x a i a i − 1 y a_{i} a_{i - 1} y ai​ai−1​y 或 a i a i − 1 m o d y i ≥ 2 a_{i} a_{i - 1} mod \hspace{…