Android 14重要更新预览

Android 14重要更新预览

国际化

Android 14 在 Android 13 的基础上进一步扩展了按应用设定语言功能,提供了一些额外的功能:

  1. 自动生成应用的 localeConfig:从 Android Studio Giraffe Canary 7 和 AGP 8.1.0-alpha07 开始,您可以配置应用以自动支持各应用语言偏好设定。Android Gradle 插件将根据您的项目资源生成 LocaleConfig 文件,并自动在最终清单文件中添加对该文件的引用,无需手动创建或更新。AGP 使用应用模块的资源以及任何库模块依赖项来确定要在 LocaleConfig 文件中添加的语言区域。

  2. 动态更新应用的 localeConfig:使用 LocaleManager 中的 setOverrideLocaleConfig() getOverrideLocaleConfig() 方法,您可以在设备的系统设置中动态更新应用的受支持语言列表。这种灵活性允许您按区域自定义支持的语言列表、进行 A/B 实验,或者如果您的应用通过服务器端推送进行本地化,则可以提供更新后的语言区域列表。

  3. 输入法 (IME) 的应用语言可见性:IME 可以通过 getApplicationLocales() 方法查看当前应用的语言,并将 IME 语言与该语言进行匹配。

  4. 语法变化 API:Android 14 引入了语法变化 API,帮助您针对区分性别的语言构建以用户为中心的界面。不同性别的语法在许多语言中是有区别的,正确反映用户的性别在用户体验和参与度上有积极的影响。

  5. 地区偏好设置:用户可以通过地区偏好设置对温度单位、一周的第一天和编号系统进行个性化设置。这些偏好设置在 Android 设置菜单中集中显示,并在备份和恢复设备后保持不变。应用可以通过多个 API 和 intent(例如 getTemperatureUnitgetFirstDayOfWeek)访问用户偏好设置,并根据用户的设置调整其显示信息的方式。同时,您还可以注册 BroadcastReceiver 来处理地区偏好设置的更改。

如需找到这些设置,请打开“设置”应用,然后依次前往系统 > 语言和输入法 > 地区偏好设置

无障碍

Android 14 支持非线性字体放大高达 200%,为弱视用户提供了更多无障碍功能选项,符合网络内容无障碍指南 (WCAG)。

非线性放大曲线的使用避免了屏幕上大文本元素过度放大的问题,因此大号文本的放大比例不会与较小的文本相同。这种放大策略保持了不同大小元素之间的比例层次结构,并缓解了线性放大带来的问题,如文本截断或非常大的文本难以阅读。

使用非线性字体放大测试应用
在设备的无障碍设置中启用最大字号,以测试应用。
如果应用使用放大像素 (sp) 单位定义文本大小,系统将自动应用这些额外选项和放大改进。但仍建议在启用最大字号 (200%) 的情况下进行界面测试,确保应用正确应用字号,且在适应较大字号时不影响易用性。

启用 200% 字号的步骤:

  1. 打开“设置”应用,然后前往无障碍 > 显示大小和文字。
  2. 在字号选项中,点击加号 (+) 图标,直到启用最大字号设置。

在应用中使用放大像素 (sp) 单位
始终以 sp 为单位指定文本大小,这样 Android 可以应用用户的首选文本大小并进行适当的缩放。

不要为内边距或视图高度使用 sp 单位,因为非线性字体放大可能导致不成比例的效果。

使用 TypedValue.applyDimension() 方法将 sp 单位转换为像素,并使用 TypedValue.deriveDimension() 方法将像素转换为 sp。这些方法会自动应用适当的非线性放大曲线。

避免使用 Configuration.fontScaleDisplayMetrics.scaledDensity 进行硬编码,因为字体放大现在是非线性的,这些字段不再准确。

用户体验

Android 14 在无障碍方面支持非线性字体放大高达 200%,为弱视用户提供更多选项,符合网络内容无障碍指南 (WCAG)。非线性放大避免了大文本元素过度放大,保持了大小元素之间的比例层次结构,改进了文本放大效果。

在应用测试中,可以在设备的无障碍设置中启用最大字号,测试应用是否正确应用字号,并适应较大字号而不影响易用性。

对于开发者,建议始终使用放大像素 (sp) 单位来定义文本大小,避免将内边距或视图高度使用 sp 单位。可以使用 TypedValue.applyDimension() 方法将 sp 转换为像素,并使用 TypedValue.deriveDimension() 方法将像素转换为 sp。避免使用 Configuration.fontScaleDisplayMetrics.scaledDensity 进行硬编码。

Android 14 还提供了更多排名信号来确定直接共享目标的排名,为用户提供更实用的结果。还支持内置和自定义预测性返回动画,以及针对应用商店的改进,包含多个新的 PackageInstaller API,可帮助应用商店改善用户体验。

Android 14 引入了几个重要的功能改进:

  1. 下载之前请求批准安装:通过requestUserPreapproval()方法,应用商店可以在提交安装会话之前请求用户批准安装,推迟下载操作直到用户批准。这样可以在后台下载和安装应用,不干扰用户。

  2. 承担未来更新的责任:使用 setRequestUpdateOwnership() 方法,安装程序可以表明将负责将被安装的应用未来的更新。这有助于确保用户只收到来自预期应用商店的更新。

  3. 在干扰性更低的情况下更新应用:通过 InstallConstraints API,应用商店可以确保应用更新在适当的时机进行,避免在用户正在使用应用时进行更新,防止中断用户操作。

  4. 无缝安装可选拆分:通过 setDontKillApp() 方法,安装程序可以指明在安装新的拆分项时应用的运行进程不应终止,实现用户在使用应用时无缝安装新功能。

  5. 检测用户截取设备屏幕截图:引入了可保护隐私的屏幕截图检测 API,应用可以按 activity 注册回调,当用户截取屏幕截图时,系统会通知应用。注意:回调未提供实际屏幕截图的图片,截取后的屏幕内容由应用决定。

这些功能改进使得 Android 14 在安装、更新、无缝安装和屏幕截图检测方面更加灵活、智能和用户友好。

图形

从 Android 14 开始,Path API 支持查询和插值功能,使得对路径对象的内部内容有了更多的了解和操作。
如需创建 Path,您可以调用 moveTo()lineTo() cubicTo() 等方法来添加路径片段。
查询功能:
现在可以使用 Path.getPathIterator API 获取 PathIterator 对象,通过遍历 PathIterator 对象的方法,可以逐个查询路径的片段和相关数据。这样可以在创建路径时保留并获取路径的详细信息。

val path = Path().apply {
    moveTo(1.0f, 1.0f)
    lineTo(2.0f, 2.0f)
    close()
}
val pathIterator = path.pathIterator

插值功能:
Android 14 为 Path 提供了 interpolate() 方法,用于在两个具有相同内部结构的路径之间进行插值。

for (segment in pathIterator) {
    println("segment: ${segment.verb}, ${segment.points}")
}

这可以方便地实现动画或形状变形的效果。使用 interpolate() 方法,可以在两个路径之间创建新的 Path,并通过插值系数控制形状的变化程度。

val interpolatedResult = Path()
if (path.isInterpolatable(otherPath)) {
    path.interpolate(otherPath, .5f, interpolatedResult)
}

总的来说,这些功能的引入使得 Path API 在创建、操作和控制矢量图形方面更加灵活和便捷。Jetpack graphics-path 库也为早期版本的 Android 提供了类似的功能支持。

核心功能

OpenJDK 17 更新
Android 14 将继续更新 Android 的核心库,与最新的 OpenJDK LTS 版本保持一致,并带来以下功能和改进:

  1. 更新大约 300 个 java.base 类以支持 Java 17。
  2. 引入文本块功能,允许使用多行字符串字面量,提升 Java 编程语言的编写便利性。
  3. 支持 instanceof 模式匹配,使对象在 instanceof 中被视为具有特定类型,无需额外的变量。
  4. 引入密封类,允许限制哪些类和接口可以扩展或实现它们,提高代码安全性和可维护性。

通过 Google Play 系统更新 (Project Mainline),超过 6 亿台设备可以接收包含这些更改的最新 Android 运行时 (ART) 更新。这些更新旨在为应用提供更加一致和安全的跨设备环境,并使用户能够享受独立于平台版本的新功能。

值得注意的是,Java 和 OpenJDK 是 Oracle 及/或其关联公司的商标或注册商标。

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

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

相关文章

Java版企业电子招标采购系统源码Spring Cloud + Spring Boot +二次开发+ MybatisPlus + Redis tbms

​ 功能描述 1、门户管理:所有用户可在门户页面查看所有的公告信息及相关的通知信息。主要板块包含:招标公告、非招标公告、系统通知、政策法规。 2、立项管理:企业用户可对需要采购的项目进行立项申请,并提交审批,查…

【人工智能前沿弄潮】—— SAM自动生成物体mask

SAM自动生成物体mask 由于SAM可以高效处理提示,可以通过在图像上抽样大量的提示来生成整个图像的mask。这种方法被用来生成数据集SA-1B。 类SamAutomaticMaskGenerator实现了这个功能。它通过在图像上的网格中对单点输入提示进行抽样,从每个提示中SAM可…

【动态规划刷题 6】 删除并获得点数 粉刷房子

740. 删除并获得点数 给你一个整数数组 nums ,你可以对它进行一些操作。 每次操作中,选择任意一个 nums[i] ,删除它并获得 nums[i] 的点数。之后,你必须删除 所有 等于 nums[i] - 1 和 nums[i] 1 的元素。 开始你拥有 0 个点数。…

【数据库】Redis可以替代Mysql吗

Redis和Mysql的搭配 Redis可以替代Mysql吗什么是RedisRedis适用的场景以及优点Redis的缺点 什么是MysqlMysql的优点Mysql缺点 总结 Redis可以替代Mysql吗 Redis不能代替MySQL, Redis和MySQL只能是一种互补。 什么是Redis Redis是一种非关系型数据库,也…

【iPhone】手机还有容量,拍视频却提示 iPhone 储存空间已满

文章目录 前言解决方案 结语 前言 今天在用 iPhone 录像的时候突然提醒我 iPhone储存空间已满 你没有足够的储存空间来录制视频” 可我明明还有 20G 的容量 我非常疑惑,因为我之前还剩1个G都能录像,现在20G反而不行了,于是重启了手机&#…

Kali中AWD靶机环境搭建

Kali中AWD靶机环境搭建 1、kali安装docker2、克隆项目(400多M,下载会有点久)3、进入项目4、下载镜像5、改镜像名6、比赛环境搭建6.1 启动靶机6.2 连接裁判机,启动check脚本6.3 关闭环境命令 7、 靶机访问方式7.1 web界面访问7.2 s…

代理模式:静态代理+JDK/CGLIB 动态代理

文章目录 1. 代理模式2. 静态代理3. 动态代理3.1. JDK 动态代理机制3.1.1. 介绍 3.1.2. JDK 动态代理类使用步骤3.1.3. 代码示例3.2. CGLIB 动态代理机制3.2.1. 介绍3.2.2. CGLIB 动态代理类使用步骤3.2.3. 代码示例 3.3. JDK 动态代理和 CGLIB 动态代理对比 4. 静态代理和动态…

HTML|计算机网络相关

1.三次握手 第一次握手:客户端首先向服务端发送请求。 第二次握手:服务端在接收到客户端发送的请求之后,需要告诉客户端已收到请求。 第三次握手:客户端在接收到服务端发送的请求和确认信息之后,同样需要告诉服务端已…

【数模】主成分分析PCA

主成分分析(Principal Component Analysis,PCA),是一种降维算法,它能将多个指标转换为少数几个主成分,这些主成分是原始变量的线性组合,且彼此之间互不相关,其能反映出原始数据的大部分信息。使用场景:一般…

PAT(Advanced Level) Practice(with python)——1023 Have Fun with Numbers

Code N int(input()) D_N 2*N # print(Yes)if len(str(D_N))>len(str(N)):print(No) else:for s in str(D_N):if s not in str(N) or str(D_N).count(s)!str(N).count(s):print("No")breakelse:print(Yes) print(D_N)

【C语言】预处理详解

本文目录 1 预定义符号 2 #define 2.1 #define 定义标识符 2.2 #define 定义宏 2.3 #define 替换规则 2.4 #和## 2.5 带副作用的宏参数 2.6 宏和函数对比 2.7 命名约定 3 #undef 4 命令行定义 5 条件编译 6 文件包含 6.1 头文件被包含的方式 6.2 嵌套文件包含 1 预定义符号 __…

uniapp根据高度表格合并

没有发现比较友好的能够合并表格单元格插件就自己简单写了一个,暂时格式比较固定 一、效果如下 二、UI视图+逻辑代码 <template><view><uni-card :is-shadow="false" is-full

自然语言处理学习笔记(六)————字典树

目录 1.字典树 &#xff08;1&#xff09;为什么引入字典树 &#xff08;2&#xff09;字典树定义 &#xff08;3&#xff09;字典树的节点实现 &#xff08;4&#xff09;字典树的增删改查 DFA&#xff08;确定有穷自动机&#xff09; &#xff08;5&#xff09;优化 1.…

BigDecimal使用总结

BigDecimal Java在java.math包中提供的API类BigDecimal&#xff0c;用来对超过16位有效位的数进行精确的运算。双精度浮点型变量double可以处理16位有效数。 在实际应用中&#xff0c;需要对更大或者更小的数进行运算和处理。float和double只能用来做科学计算或者是工程计算&a…

Leetcode-每日一题【剑指 Offer 06. 从尾到头打印链表】

题目 输入一个链表的头节点&#xff0c;从尾到头反过来返回每个节点的值&#xff08;用数组返回&#xff09;。 示例 1&#xff1a; 输入&#xff1a;head [1,3,2]输出&#xff1a;[2,3,1] 限制&#xff1a; 0 < 链表长度 < 10000 解题思路 1.题目要求我们从尾到头反过…

Python爬虫在电商数据挖掘中的应用

作为一名长期扎根在爬虫行业的专业的技术员&#xff0c;我今天要和大家分享一些有关Python爬虫在电商数据挖掘中的应用与案例分析。在如今数字化的时代&#xff0c;电商数据蕴含着丰富的信息&#xff0c;通过使用爬虫技术&#xff0c;我们可以轻松获取电商网站上的产品信息、用…

401 · 排序矩阵中的从小到大第k个数

链接&#xff1a;LintCode 炼码 - ChatGPT&#xff01;更高效的学习体验&#xff01; 题解&#xff1a; 九章算法 - 帮助更多程序员找到好工作&#xff0c;硅谷顶尖IT企业工程师实时在线授课为你传授面试技巧 class Solution { public:/*** param matrix: a matrix of intege…

mysql再docker中运行,直接在实体机上运行mysql命令初始化数据库数据

背景 项目上我们使用docker安装mysql&#xff0c;项目启动的时候需要利用sql语句初始化数据。 直接在实体上是识别不到mysql命令的。 实现方式 实现方式1&#xff1a;在docker容器内部执行sql语句 1. 将sql文件上传到容器内 docker cp /root/1.sql d5:/home/ 说明&#…

【小梦C嘎嘎——启航篇】类和对象(中篇)

【小梦C嘎嘎——启航篇】类和对象&#xff08;中篇&#xff09;&#x1f60e; 前言&#x1f64c;类的6个默认成员函数构造函数析构函数拷贝构造函数拷贝构造函数的特性有哪些&#xff1f;既然编译器可以自动生成一个拷贝构造函数&#xff0c;为什么我们还要自己设计实现呢&…

外卖点餐小程序开源源码——支持扫码点餐

一套支持店内扫码点餐、外卖点餐配送于一体的餐饮系统&#xff0c;支持商家创建优惠券&#xff0c;支持商家自定义打印机功能&#xff0c;支持商家财务管理&#xff0c;支持商户菜品管理&#xff0c;支持菜品自定义分类&#xff0c;支持商家招募骑手入驻功能。系统基于thinkphp…