特性和 API

Android 16 为开发者带来了许多新的特性和 API。以下各部分总结了这些特性,以帮助您开始使用相关的 API。

如需查看新增、修改和移除的 API 的详细列表,请阅读API diff 报告。如需了解新 API 的详细信息,请访问Android API 参考文档 - 新 API 已加亮显示,以便于查找。

您还应该检查平台变更可能影响您应用的领域。如需了解更多信息,请参阅以下页面

核心功能

Android 包含扩展 Android 系统核心功能的新 API。

2025 年发布两个 Android API 版本

  • 此预览版适用于下一个 Android 主要版本,计划于 2025 年第二季度发布。此版本与我们过去的所有 API 版本类似,可能包含计划中的行为变更,这些变更通常与 targetSdkVersion 相关。
  • 我们将主要版本提前了一个季度(第二季度,而不是往年的第三季度),以便更好地与我们生态系统中设备发布时间表保持一致,从而让更多设备能够更快地获得 Android 主要版本。主要版本在第二季度发布,因此您需要比往年提前几个月进行年度兼容性测试,以确保您的应用已准备就绪。
  • 我们计划在 2025 年第四季度发布另一个版本,其中也将包含新的开发者 API。第二季度主要版本将是 2025 年唯一一个包含可能影响应用的计划行为变更的版本。

除了新的开发者 API 外,第四季度次要版本还将包含功能更新、优化和错误修复;它不会包含任何影响应用的行为变更。

Timeline view of Android releases in 2025, noting that the 25Q2
       release is a major release and the 25Q4 release is a minor release.

我们将继续按季度发布 Android 版本。API 版本之间的第一季度和第三季度更新将提供增量更新,以帮助确保持续的质量。我们正在积极与设备合作伙伴合作,将第二季度版本推向尽可能多的设备。

在主要和次要版本中使用新 API

现在,可以使用 VERSION_CODESSDK_INT 常量通过 API 级别检查来保护代码块。对于 Android 主要版本,这将继续得到支持。

if (SDK_INT >= VERSION_CODES.BAKLAVA) {
  // Use APIs introduced in Android 16
}

新的 VERSION_CODES_FULL 枚举中的新 SDK_INT_FULL 常量可用于检查主要和次要版本的 API。

if (SDK_INT_FULL >= VERSION_CODES_FULL.[MAJOR or MINOR RELEASE]) {
  // Use APIs introduced in a major or minor release
}

您还可以使用 Build.getMinorSdkVersion() 方法仅获取次要 SDK 版本。

val minorSdkVersion = Build.getMinorSdkVersion(VERSION_CODES_FULL.BAKLAVA)

这些 API 尚未最终确定,可能会发生变化,如果您有任何疑虑,请向我们发送反馈

用户体验和系统界面

Android 16 为应用开发者和用户提供了更多控制和灵活性,可以根据他们的需求配置设备。

以进度为中心的通知

Android 16 引入了以进度为中心的通知,可帮助用户无缝跟踪用户发起的端到端旅程。

Notification.ProgressStyle 是一种新的通知样式,可让您创建以进度为中心的通知。主要用例包括网约车、配送和导航。在 Notification.ProgressStyle 类中,您可以使用 来表示用户旅程中的状态和里程碑。

要了解更多信息,请参阅以进度为中心的通知文档页面。

锁定屏幕上显示以进度为中心的通知。
通知栏中显示以进度为中心的通知。

预测性返回更新

Android 16 添加了新的 API,可帮助您在手势导航中启用预测性返回系统动画,例如返回主屏幕动画。使用新的 PRIORITY_SYSTEM_NAVIGATION_OBSERVER 注册 onBackInvokedCallback 允许您的应用在系统处理返回导航时接收常规的 onBackInvoked 调用,而不会影响正常的返回导航流程。

此外,Android 16 还添加了 finishAndRemoveTaskCallback()moveTaskToBackCallback。通过向 OnBackInvokedDispatcher 注册这些回调,系统可以在调用返回手势时触发特定行为并播放相应的预先动画。

更丰富的触觉反馈

自诞生以来,Android 一直提供对触觉致动器的控制。

Android 11 添加了对更复杂的触觉效果的支持,这些效果可通过设备定义的语义原语的 VibrationEffect.Compositions 支持更高级的致动器。

Android 16 添加了触觉 API,使应用能够定义触觉效果的振幅和频率曲线,同时抽象化设备能力之间的差异。

开发者生产力和工具

虽然我们的大部分工作都围绕着 Android StudioJetpack ComposeAndroid Jetpack 库等工具来提高您的生产力,但我们始终在平台中寻找方法来帮助您实现愿景。

动态壁纸的内容处理

在 Android 16 中,动态壁纸框架正在获得一个新的内容 API,以解决动态的、用户驱动的壁纸带来的挑战。目前,包含用户提供内容的动态壁纸需要复杂的服务特定实现。Android 16 引入了 WallpaperDescriptionWallpaperInstance。WallpaperDescription 允许您识别来自同一服务的动态壁纸的不同实例。例如,在主屏幕和锁定屏幕上都有实例的壁纸可能在两个地方都有独特的内容。壁纸选择器和 WallpaperManager 使用此元数据更好地向用户呈现壁纸,从而简化您创建多样化和个性化动态壁纸体验的过程。

性能和电池

Android 16 引入了有助于收集应用洞察信息的 API。

系统触发的性能分析

ProfilingManagerAndroid 15 中添加,赋予应用在现场公共设备上使用 Perfetto 请求性能分析数据收集的能力。然而,由于此性能分析必须从应用中启动,因此对于应用来说,难以或不可能捕获启动或 ANR 等关键流程。

为了帮助解决此问题,Android 16 为 ProfilingManager 引入了系统触发的性能分析。应用可以注册兴趣,以便接收针对特定触发器(例如冷启动 reportFullyDrawn 或 ANR)的跟踪,然后系统代表应用启动和停止跟踪。跟踪完成后,结果将发送到应用的数据目录。

ApplicationStartInfo 中的启动组件

ApplicationStartInfoAndroid 15 中添加,允许应用查看进程启动原因、启动类型、启动时间、限流和其他有用的诊断数据。Android 16 添加了 getStartComponent() 以区分触发启动的组件类型,这有助于优化应用启动流程。

更好的任务内省

JobScheduler#getPendingJobReason() API 返回任务可能挂起的原因。但是,任务可能因多种原因而挂起。

在 Android 16 中,我们引入了一个新 API JobScheduler#getPendingJobReasons(int jobId),该 API 返回任务挂起的多个原因,这些原因可能来自开发者设置的显式约束以及系统设置的隐式约束。

我们还引入了 JobScheduler#getPendingJobReasonsHistory(int jobId),该 API 返回最近的约束变更列表。

我们建议使用此 API 帮助您调试任务可能无法执行的原因,特别是如果您看到某些任务的成功率降低或存在某些任务完成延迟的错误。例如,后台更新微件失败,或在应用启动之前未能调用预取任务。

这还可以帮助您更好地理解某些任务未完成是由于系统定义的约束还是显式设置的约束。

自适应刷新率

自适应刷新率 (ARR) 于 Android 15 中引入,它使支持硬件的显示刷新率能够使用离散的 VSync 步长适应内容帧率。这降低了功耗,同时消除了潜在导致卡顿的模式切换需求。

Android 16 引入了 hasArrSupport()getSuggestedFrameRate(int),同时恢复了 getSupportedRefreshRates(),以便您的应用更容易利用 ARR。RecyclerView 1.4 在从滑动或平滑滚动中稳定下来时,内部支持 ARR,我们正在继续努力将 ARR 支持添加到更多 Jetpack 库中。此帧率文章涵盖了可用于设置帧率的许多 API,以便您的应用可以直接使用 ARR。

ADPF 中的裕量 API

SystemHealthManager 引入了 getCpuHeadroomgetGpuHeadroom API,旨在为游戏和资源密集型应用提供可用 CPU 和 GPU 资源的估计。这些方法提供了一种衡量应用或游戏如何最佳改进系统健康状况的方式,尤其是在与其他 Android 动态性能框架 (ADPF) API(可检测热节流)结合使用时。

通过在受支持的设备上使用 CpuHeadroomParamsGpuHeadroomParams,您可以自定义用于计算裕量的时间窗口,并在平均或最小资源可用性之间进行选择。这有助于您相应地减少 CPU 或 GPU 资源使用,从而改善用户体验并延长电池续航时间。

无障碍功能

Android 16 添加了新的无障碍功能 API 和特性,可以帮助您将应用带给每一位用户。

改进的无障碍功能 API

Android 16 添加了额外的 API,以增强 UI 语义,有助于提高依赖无障碍服务的用户的一致性,例如 TalkBack

文本轮廓以获得最大文本对比度

低视力用户通常对比度敏感度降低,这使得区分前景对象和背景变得困难。为了帮助这些用户,Android 16 引入了文本轮廓,取代了高对比度文本,文本轮廓在文本周围绘制更大的对比区域,从而极大地提高了易读性。

Android 16 包含新的 AccessibilityManager API,允许您的应用检查注册监听器以查看此模式是否已启用。这主要用于像 Compose 这样的 UI 工具包提供相似的视觉体验。如果您维护 UI 工具包库或您的应用执行绕过 android.text.Layout 类进行自定义文本渲染,那么您可以使用此功能来了解何时启用了文本轮廓。

在 Android 16 新的文本轮廓无障碍功能之前和之后对比增强的文本

TtsSpan 添加了 Duration

Android 16 扩展了 TtsSpan,添加了 TYPE_DURATION,其中包含 ARG_HOURSARG_MINUTESARG_SECONDS。这使您可以直接标注时间持续时间,确保使用 TalkBack 等服务获得准确一致的文本转语音输出。

支持具有多个标签的元素

Android 目前允许 UI 元素从其他元素派生其无障碍标签,现在提供了关联多个标签的功能,这在网页内容中很常见。通过在 AccessibilityNodeInfo 中引入基于列表的 API,Android 可以直接支持这些多标签关系。作为此更改的一部分,我们已弃用 AccessibilityNodeInfo#setLabeledBy#getLabeledBy,转而支持 #addLabeledBy#removeLabeledBy#getLabeledByList

改进了对可展开元素的支持

Android 16 添加了无障碍 API,允许您传达交互元素(例如菜单和可展开列表)的展开或折叠状态。通过使用 setExpandedState 设置展开状态,并使用 CONTENT_CHANGE_TYPE_EXPANDED 内容变更类型分派 TYPE_WINDOW_CONTENT_CHANGED AccessibilityEvents,您可以确保 TalkBack 等屏幕阅读器会 اعلان状态变更,从而提供更直观、更具包容性的用户体验。

不确定进度条

Android 16 添加了 RANGE_TYPE_INDETERMINATE,为您提供了一种方法,可以为确定和不确定 ProgressBar 微件公开 RangeInfo,从而允许 TalkBack 等服务更一致地为进度指示器提供反馈。

三态复选框

Android 16 中新的 AccessibilityNodeInfo getCheckedsetChecked(int) 方法现在除了支持“已选中”和“未选中”状态外,还支持“部分选中”状态。这取代了已弃用的布尔类型 isCheckedsetChecked(boolean)

补充说明

当无障碍服务描述 ViewGroup 时,它会合并其子视图的内容标签。如果您为 ViewGroup 提供 contentDescription,无障碍服务会假定您也正在覆盖不可获得焦点的子视图的说明。如果您想标记下拉菜单(例如,“字体系列”)等内容,同时保留当前选择以便于访问(例如,“Roboto”),这可能会出现问题。Android 16 添加了 setSupplementalDescription,因此您可以提供有关 ViewGroup 的信息文本,而无需覆盖其子级的信息。

必填表单字段

Android 16 为 AccessibilityNodeInfo 添加了 setFieldRequired,以便应用可以告知无障碍服务表单字段需要输入。这对于填写多种类型表单的用户来说是一个重要的场景,即使是像必需条款和条件复选框这样简单的内容,也可以帮助用户持续识别和快速导航到必需字段。

将手机用作带有 LEA 助听器的语音通话的麦克风输入

Android 16 添加了 LE Audio 助听器用户在语音通话中,可在助听器内置麦克风和手机麦克风之间切换的功能。这在嘈杂环境或助听器麦克风可能表现不佳的其他情况下非常有用。

LEA 助听器的环境音量控制

Android 16 添加了 LE Audio 助听器用户调节助听器麦克风拾取环境声音音量的功能。这在背景噪音过大或过小的情况下非常有用。

相机

Android 16 增强了对专业相机用户的支持,允许进行混合自动曝光以及精确的色温和色调调整。新的夜间模式指示器可帮助您的应用知道何时切换到和退出夜间模式相机会话。新的 Intent 操作使拍摄动态照片更加容易,我们还在继续改进 UltraHDR 图像,支持 HEIC 编码以及 ISO 21496-1 标准草案中的新参数。

混合自动曝光

Android 16 为 Camera2 添加了新的混合自动曝光模式,允许您手动控制曝光的特定方面,同时让自动曝光 (AE) 算法处理其余部分。您可以控制 ISO + AE曝光时间 + AE,与当前完全手动控制或完全依赖自动曝光的方法相比,提供了更大的灵活性。

fun setISOPriority() {
    // ... (Your existing code before the snippet) ...

    val availablePriorityModes = mStaticInfo.characteristics.get(
        CameraCharacteristics.CONTROL_AE_AVAILABLE_PRIORITY_MODES
    )

    // ... (Your existing code between the snippets) ...

    // Turn on AE mode to set priority mode
    reqBuilder.set(
        CaptureRequest.CONTROL_AE_MODE,
        CameraMetadata.CONTROL_AE_MODE_ON
    )
    reqBuilder.set(
        CaptureRequest.CONTROL_AE_PRIORITY_MODE,
        CameraMetadata.CONTROL_AE_PRIORITY_MODE_SENSOR_SENSITIVITY_PRIORITY
    )
    reqBuilder.set(
        CaptureRequest.SENSOR_SENSITIVITY,
        TEST_SENSITIVITY_VALUE
    )
    val request: CaptureRequest = reqBuilder.build()

    // ... (Your existing code after the snippet) ...
}

精确的色温和色调调整

Android 16 添加了相机对精细色温和色调调整的支持,以更好地支持专业视频录制应用。在之前的 Android 版本中,您可以通过 CONTROL_AWB_MODE 控制白平衡设置,该设置包含仅限于预设列表的选项,例如 白炽灯阴天黄昏COLOR_CORRECTION_MODE_CCT 允许使用 COLOR_CORRECTION_COLOR_TEMPERATURECOLOR_CORRECTION_COLOR_TINT 根据相关色温精确调整白平衡。

fun setCCT() {
    // ... (Your existing code before this point) ...

    val colorTemperatureRange: Range<Int> =
        mStaticInfo.characteristics[CameraCharacteristics.COLOR_CORRECTION_COLOR_TEMPERATURE_RANGE]

    // Set to manual mode to enable CCT mode
    reqBuilder[CaptureRequest.CONTROL_AWB_MODE] = CameraMetadata.CONTROL_AWB_MODE_OFF
    reqBuilder[CaptureRequest.COLOR_CORRECTION_MODE] = CameraMetadata.COLOR_CORRECTION_MODE_CCT
    reqBuilder[CaptureRequest.COLOR_CORRECTION_COLOR_TEMPERATURE] = 5000
    reqBuilder[CaptureRequest.COLOR_CORRECTION_COLOR_TINT] = 30

    val request: CaptureRequest = reqBuilder.build()

    // ... (Your existing code after this point) ...
}

以下示例展示了应用不同的色温和色调调整后照片的效果

未应用色温或色调调整的原始图像。
色温调整到 3000 的图像。
色温调整到 7000 的图像。


色调水平降低 50 的图像。
色调水平提高 50 的图像。

相机夜间模式场景检测

为了帮助您的应用了解何时切换到和退出夜间模式相机会话,Android 16 添加了 EXTENSION_NIGHT_MODE_INDICATOR。如果支持,它可在 Camera2 中的 CaptureResult 中获取。

这是我们在Instagram 如何让用户拍摄出色的弱光照片博客文章中简要提到即将推出的 API。该文章是一份关于如何实现夜间模式的实用指南,并附带一个案例研究,该案例研究将高质量的应用内夜间模式照片与应用内相机分享照片数量的增加相关联。

动态照片捕获意图操作

Android 16 添加了标准 Intent 操作 — ACTION_MOTION_PHOTO_CAPTUREACTION_MOTION_PHOTO_CAPTURE_SECURE — 这些操作请求相机应用捕获动态照片并将其返回。

您必须传递额外的 EXTRA_OUTPUT 来控制图像写入位置,或者通过 Intent.setClipData(ClipData) 传递 Uri。如果您未设置 ClipData,则在调用 Context.startActivity(Intent) 时会为您复制到此处。

动态照片示例,显示了静态图像,然后是动态播放。

UltraHDR 图像增强

标准动态范围 (SDR) 与高动态范围 (HDR) 图像质量对比图。

Android 16 继续致力于通过 UltraHDR 图像提供令人惊艳的图像质量。它增加了对 HEIC 文件格式的 UltraHDR 图像的支持。这些图像将获得 ImageFormat 类型 HEIC_ULTRAHDR,并将包含类似于现有 UltraHDR JPEG 格式的嵌入式增益图。我们也在研究对 UltraHDR 的 AVIF 支持,敬请关注。

此外,Android 16 在 UltraHDR 中实现了 ISO 21496-1 标准草案中的附加参数,包括获取和设置应应用增益图数学运算的色彩空间的能力,以及支持带有 SDR 增益图的 HDR 编码基础图像。

图形

Android 16 包含了最新的图形改进,例如使用 AGSL 的自定义图形效果。

使用 AGSL 创建自定义图形效果

Android 16 添加了 RuntimeColorFilterRuntimeXfermode,允许您创建阈值、深褐色和色相饱和度等复杂效果,并将其应用于绘制调用。自 Android 13 起,您就可以使用 AGSL 创建扩展 Shader 的自定义 RuntimeShaders。新 API 模仿了这一点,添加了由 AGSL 提供支持的扩展 ColorFilterRuntimeColorFilter,以及一种 Xfermode 效果,允许您实现基于 AGSL 的源像素和目标像素之间的自定义合成和混合。

private val thresholdEffectString = """
    uniform half threshold;

    half4 main(half4 c) {
        half luminosity = dot(c.rgb, half3(0.2126, 0.7152, 0.0722));
        half bw = step(threshold, luminosity);
        return bw.xxx1 * c.a;
    }"""

fun setCustomColorFilter(paint: Paint) {
   val filter = RuntimeColorFilter(thresholdEffectString)
   filter.setFloatUniform(0.5);
   paint.colorFilter = filter
}

连接

Android 16 更新了平台,使您的应用能够访问通信和无线技术领域的最新进展。

增强安全的测距

Android 16 增加了对带有 Wi-Fi 6 的 802.11az 的受支持设备上 Wi-Fi 定位中强大安全功能的支持,允许应用将该协议的更高精度、更大可扩展性和动态调度与包括基于 AES-256 的加密和抵御 MITM 攻击的保护在内的安全增强功能相结合。这使其能够在接近用例中更安全地使用,例如解锁笔记本电脑或车门。802.11az 与 Wi-Fi 6 标准集成,利用其基础设施和功能实现更广泛的应用和更容易的部署。

通用测距 API

Android 16 包含了新的 RangingManager,它提供了在受支持硬件上确定本地设备和远程设备之间距离和角度的方法。RangingManager 支持使用各种测距技术,例如 BLE 信道探测、基于 BLE RSSI 的测距、超宽带和 Wi-Fi 往返时间。

配套设备管理器设备存在

在 Android 16 中,正在引入用于绑定配套应用服务的新 API。当 BLE 在范围内且蓝牙已连接时,服务将绑定;当 BLE 超出范围或蓝牙断开连接时,服务将解除绑定。应用将根据各种 DevicePresenceEvent 接收新的 'onDevicePresenceEvent()' 回调。更多详细信息可在 'startObservingDevicePresence(ObservingDevicePresenceRequest)' 中找到。

媒体

Android 16 包含了许多改进媒体体验的特性。

照片选择器改进

照片选择器为用户提供了一种安全、内置的方式,允许您的应用访问本地和云存储中的选定图像和视频,而不是整个媒体库。通过 Google 系统更新Google Play 服务结合使用模块化系统组件,它支持回溯至 Android 4.4 (API 级别 19)。只需使用关联的 Android Jetpack 库编写几行代码即可完成集成。

Android 16 包含了照片选择器的以下改进

  • 嵌入式照片选择器新 API,使应用能够将照片选择器嵌入其视图层次结构中。这使得它感觉更像应用的一部分,同时仍然利用进程隔离,允许用户在应用无需过于宽泛权限的情况下选择媒体。为了最大限度地兼容不同平台版本并简化您的集成,如果您想集成嵌入式照片选择器,则需要使用即将推出的 Android Jetpack 库。
  • 照片选择器中的云搜索新 API,可实现从云媒体提供商中搜索 Android 照片选择器中的内容。照片选择器中的搜索功能即将推出。

高级专业视频

Android 16 引入了对 高级专业视频 (APV) 编解码器的支持,该编解码器专为专业级高质量视频录制和后期制作而设计。

APV 编解码器标准具有以下特性

  • 感知无损视频质量(接近原始视频质量)
  • 低复杂度、高吞吐量的仅帧内编码(不含像素域预测),以更好地支持编辑工作流
  • 支持高达几 Gbps 的高比特率范围,适用于 2K、4K 和 8K 分辨率内容,通过轻量级熵编码方案实现
  • 用于沉浸式内容和启用并行编码和解码的帧分块
  • 支持各种色度采样格式和位深
  • 支持多次解码和重新编码而不会导致严重的视觉质量下降
  • 支持多视图视频和辅助视频,如深度、alpha 和预览
  • 支持 HDR10/10+ 和用户自定义元数据

APV 的参考实现通过 OpenAPV 项目提供。Android 16 将实现对 APV 422-10 配置文件的支持,该配置文件提供 YUV 422 色彩采样以及 10 位编码,目标比特率高达 2Gbps。

隐私权

Android 16 包含了许多有助于应用开发者保护用户隐私的特性。

Health Connect 更新

Health Connect 添加了 ACTIVITY_INTENSITY,这是一种根据世界卫生组织关于中等强度和高强度活动的指南定义的数据类型。每条记录都需要开始时间、结束时间以及活动强度是中等强度还是高强度。

Health Connect 还包含支持病历的更新 API。这允许应用在获得用户明确同意的情况下以 FHIR 格式读取和写入病历。

Android 上的 Privacy Sandbox

Android 16 集成了最新版本的Android 上的 Privacy Sandbox,这是我们持续努力开发用户隐私得到保护的技术的一部分。我们的网站提供更多关于 Android 上的 Privacy Sandbox 开发者 Beta 计划的信息,以帮助您入门。查看SDK Runtime,它允许 SDK 在与其服务的应用分开的专用运行时环境中运行,为用户数据收集和共享提供了更强的保障。

安全性

Android 16 包含了有助于增强应用安全和保护应用数据的特性。

密钥共享 API

Android 16 添加了支持与其他应用共享对 Android Keystore 密钥访问的 API。新的 KeyStoreManager 类支持按应用 uid授予撤销对密钥的访问,并包含一个供应用访问共享密钥的 API。

设备外形尺寸

Android 16 为您的应用提供了支持,使其能够充分利用 Android 的各种外形尺寸。

电视标准化图像和音频质量框架

Android 16 中的新 MediaQuality公开了一组标准化 API,用于访问音频和图像配置文件以及与硬件相关的设置。这允许流媒体应用查询配置文件并将其动态应用于媒体

  • 使用更宽动态范围制作的电影需要更高的色彩准确度才能看到阴影中的细微细节并适应环境光线,因此优先考虑色彩准确度而非亮度的配置文件可能更合适。
  • 直播体育赛事通常使用较窄的动态范围制作,但通常在白天观看,因此优先考虑亮度而非色彩准确度的配置文件可以提供更好的结果。
  • 完全交互式内容需要最小的处理以减少延迟,并且需要更高的帧率,这就是许多电视机随附游戏配置文件的原因。

该 API 允许应用在配置文件之间切换,并允许用户调节受支持的电视以最适合其内容。

国际化

Android 16 添加了在设备以不同语言使用时补充用户体验的特性和功能。

竖排文本

Android 16 添加了对垂直渲染和测量文本的低级支持,为库开发者提供了基础的竖排书写支持。这对于日语等通常使用竖排书写系统的语言特别有用。Paint 类中新增了一个标志 VERTICAL_TEXT_FLAG。使用 Paint.setFlags 设置此标志时,Paint 的文本测量 API 将报告垂直进距而非水平进距,并且 Canvas 将垂直绘制文本。

val text = "「春は、曙。」"
Box(
    Modifier.padding(innerPadding).background(Color.White).fillMaxSize().drawWithContent {
        drawIntoCanvas { canvas ->
            val paint = Paint().apply { textSize = 64.sp.toPx() }
            // Draw text vertically
            paint.flags = paint.flags or VERTICAL_TEXT_FLAG
            val height = paint.measureText(text)
            canvas.nativeCanvas.drawText(
                text,
                0,
                text.length,
                size.width / 2,
                (size.height - height) / 2,
                paint
            )
        }
    }
) {}

测量系统定制

用户现在可以在“设置”中的区域偏好设置中定制其测量系统。用户偏好设置作为区域设置代码的一部分包含在内,因此您可以在 ACTION_LOCALE_CHANGED 上注册 BroadcastReceiver,以处理区域偏好设置更改时的区域设置配置更改。

使用格式化程序有助于匹配本地体验。例如,在英语(美国)中,“0.5 英寸”对于已将手机设置为英语(丹麦)或在美国英语中使用公制作为测量系统偏好设置的用户来说,是“12.7 毫米”。

要查找这些设置,请打开“设置”应用并导航至系统 > 语言和区域