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 的最终版本中,您可以启用开发者选项来测试返回主屏幕动画。这样可以确保应用程序的用户体验得到最优化。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/377540.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

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

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

cleanmymacX和腾讯柠檬哪个好用

很多小伙伴在使用Mac时&#xff0c;会遇到硬盘空间不足的情况。遇到这种情况&#xff0c;我们能做的就是清理掉一些不需要的软件或者一些占用磁盘空间较大的文件来腾出空间。我们可以借助一些专门的清理工具&#xff0c;本文中我们来推荐几款好用的Mac知名的清理软件。并且将Cl…

Page 257~258 11.2.6处理“鼠标移动”消息

鼠标在当前窗口上移动&#xff0c;哪怕不单机&#xff0c;也会造成操作系统向该窗口发送消息。鼠标移动消息是WM_MOUSEMOVE,将它加入窗口过程函数的switch-case中&#xff1a; 我们自行编写的回调函数如下&#xff1a; 之前编写的OnPaint()函数也需要修改一下&#xff1a; 几点…

清华系2B模型杀出,性能吊打LLaMA-13B

2 月 1 日&#xff0c;面壁智能与清华大学自然语言处理实验室共同开源了系列端侧语言大模型 MiniCPM&#xff0c;主体语言模型 MiniCPM-2B 仅有 24 亿&#xff08;2.4B&#xff09;的非词嵌入参数量。 在综合性榜单上与 Mistral-7B 相近&#xff0c;在中文、数学、代码能力表现…

c++多态(2)-- 虚函数

我们在多态(1)中说到&#xff0c;多态就是使用父类指针访问子类函数&#xff0c;可以使得代码更加的简便。并且举了一个喂食动物的例子加以说明&#xff0c;我们使用代码进行展示。 enum class _ANIMALS_TYPE {CAT,DOG,ANIMAL_COUNT };class Animal { public:Animal(_ANIMALS_…

2024.2.6

1.现有无序序列数组为23,24,12,5,33,5347&#xff0c;请使用以下排序实现编程 函数1:请使用冒泡排序实现升序排序 函数2:请使用简单选择排序实现升序排序 函数3:请使用快速排序实现升序排序 函数4:请使用插入排序实现升序排序 #include<stdio.h> #include<string.h&g…

Linux操作系统基础(一):操作系统概述

文章目录 操作系统概述 一、计算机分类 二、计算机组成 三、操作系统概述 四、操作系统分类 操作系统概述 一、计算机分类 计算机一般分为个人计算机&#xff08;笔记、台式机&#xff09;与 企业级服务器&#xff08;1U、2U、机柜、塔式、刀片&#xff09;两种形式。 二…

日本的便宜服务器有哪些?

年底之际&#xff0c;无非是云服务器优惠的黄金时期&#xff0c;对于个人用户和独立开发者来说&#xff0c;无论你是搭建个人网站还是个人博客&#xff0c;现在都是行动的好时机。那么&#xff0c;对于这时要入手日本服务器的用户&#xff0c;该怎么找便宜厂商呢&#xff1f;这…

Shell脚本系列| SSH分发公钥方法 - expect脚本的使用

ssh原理&#xff1a;在SSH安全协议的原理中&#xff0c; 是一种非对称加密与对称加密算法的结合。用于确保远程登录和其他网络服务的会话安全&#xff0c;通过非对称加密、会话加密、多重验证机制等手段&#xff0c;保护数据传输的机密性和完整性。 ssh登录有2种方法&#xff1…

P2957

题目描述 The cows enjoy mooing at the barn because their moos echo back, although sometimes not completely. Bessie, ever the excellent secretary, has been recording the exact wording of the moo as it goes out and returns. She is curious as to just how mu…

Qt Windows和Android使用MuPDF预览PDF文件

文章目录 1. Windows MuPDF编译2. Android MuPDF编译3. 引用 MuPDF 库4. 解析本地PDF文件 1. Windows MuPDF编译 使用如下命令将MuPDF的源码克隆到本地 git clone --recursive git://git.ghostscript.com/mupdf.git直接用VS&#xff0c;打开 mupdf/platform/win32/mupdf.sln …

基于Skywalking开发分布式监控(二)

续上篇&#xff0c;上一篇主要是讲了为啥选skywalking&#xff0c;以及怎么有针对性改造SW Agent&#xff0c;现在我们继续看看如何构建自定义Trace跟踪链 要对SW Agent插件做适当剪裁&#xff0c;原来包括customize插件在内SW 8.9有100多个插件&#xff0c;如果没有作用也就罢…

【网络技术】【Kali Linux】Nmap 嗅探(一)简单扫描

一、实验环境 本次实验进行简单的Nmap扫描&#xff0c;实验使用 Kali Linux 虚拟机和 Ubuntu Linux 虚拟机完成&#xff0c;主机操作系统为 Windows 11&#xff0c;虚拟化平台选择 Oracle VM VirtualBox&#xff0c;如下图所示。 二、实验步骤 1、相关配置 Kali Linux 虚拟机…

windows中的apache改成手动启动的操作步骤

使用cmd解决安装之后开机自启的问题 services.msc 0. 这个命令是打开本地服务找到apache的服务名称 2 .通过服务名称去查看服务的状态 sc query apacheapache3.附加上关掉和启动的命令&#xff08;换成是你的服务名称&#xff09; 关掉命令 sc stop apacheapache启动命令 …

ChatGPT 3.5与4.0:深入解析技术进步与性能提升的关键数据

大家好&#xff0c;欢迎来到我的博客&#xff01;今天我们将详细比较两个引人注目的ChatGPT版本——3.5和4.0&#xff0c;通过一些关键数据来深入解析它们之间的差异以及4.0版本的技术进步。 1. 模型规模与参数 ChatGPT 3.5&#xff1a; 参数数量&#xff1a;约1.7亿个模型层数…

07-Java桥接模式 ( Bridge Pattern )

Java桥接模式 摘要实现范例 桥接模式&#xff08;Bridge Pattern&#xff09;是用于把抽象化与实现化解耦&#xff0c;使得二者可以独立变化 桥接模式涉及到一个作为桥接的接口&#xff0c;使得实体类的功能独立于接口实现类&#xff0c;这两种类型的类可被结构化改变而互不影…

CSS之盒子模型

盒子模型 01-选择器 结构伪类选择器 基本使用 作用&#xff1a;根据元素的结构关系查找元素。 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IE…

12 选择排序和堆排序

选择排序 基本思想 每一次从待排序的数据元素中选出最小(或最大)的一个元素&#xff0c;存放在序列的起始位置&#xff0c;直到全部待排序的数据元素排完 直接选择排序 在元素集合array[i]–array[n-1]中选择关键码最大(小)的数据元素若它不是这组元素的最后一个(第一个)元素…

relectron框架——打包前端vue3、react为pc端exe可执行程序

文章目录 ⭐前言⭐搭建Electron打包环境&#x1f496; npm镜像调整&#x1f496; 初始化项目&#x1f496; 配置index.js ⭐打包vue3⭐打包react⭐总结⭐结束 ⭐前言 大家好&#xff0c;我是yma16&#xff0c;本文分享关于使用electronjs打包前端vue3、react成exe可执行程序。…

【开源】JAVA+Vue+SpringBoot实现房屋出售出租系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 房屋销售模块2.2 房屋出租模块2.3 预定意向模块2.4 交易订单模块 三、系统展示四、核心代码4.1 查询房屋求租单4.2 查询卖家的房屋求购单4.3 出租意向预定4.4 出租单支付4.5 查询买家房屋销售交易单 五、免责说明 一、摘…