Android 16 為開發人員推出強大的新功能和 API。以下各節將摘要說明這些功能,協助您開始使用相關 API。
如需新增、修改及移除 API 的詳細清單,請參閱 API 差異比較表。如要進一步瞭解新的 API,請參閱 Android API 參考資料 - 新的 API 會醒目顯示,以利於查看。此外,您也應查看平台變更可能對應用程式造成的影響。詳情請參閱下列頁面:
核心功能
Android 包含新的 API,可擴充 Android 系統的核心功能。
2025 年將推出兩個 Android API 版本
- 此预览版适用于 Android 的下一个主要版本,计划于 2025 年第 2 季度发布。此版本与我们过去的所有 API 版本类似,我们可以进行计划性的行为更改,这些更改通常与 targetSdkVersion 相关联。
- 我们计划提前一个季度(2021 年第 2 季度,而非之前的第 3 季度)发布主要版本,以便更好地与整个生态系统中的设备发布时间表保持一致,让更多设备能够更早地搭载 Android 主要版本。由于主要版本将于第 2 季度发布,因此您需要比往年提前几个月进行年度兼容性测试,以确保您的应用已做好准备。
- 我们计划在 2025 年第 4 季度再发布一次,届时还将推出新的开发者 API。2025 年只有第二季度的主要版本包含可能影响应用的计划行为变更。
除了新的开发者 API 之外,第 4 季度次要版本还将包含功能更新、优化和 bug 修复;其中不会包含任何会影响应用的行为变更。
我们将继续每季度发布 Android 版本。在 API 版本之间,第 1 季度和第 3 季度的更新将提供增量更新,以帮助确保持续提供高质量的服务。我们正积极与设备合作伙伴合作,将 Q2 版本推广到尽可能多的设备。
在主要版本和次要版本中使用新 API
目前,使用 SDK_INT 常量与 VERSION_CODES 结合使用,即可通过检查 API 级别来保护代码块。我们将继续支持主要 Android 版本。
if (SDK_INT >= VERSION_CODES.BAKLAVA) {
// Use APIs introduced in Android 16
}
新的 SDK_INT_FULL 常量可用于针对主要版本和次要版本进行 API 检查,并使用新的 VERSION_CODES_FULL 枚举。
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 尚未最终确定,可能会发生变化,因此如果您有任何疑虑,请向我们发送反馈。
使用者體驗和系統 UI
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 Studio、Jetpack Compose 和 Android Jetpack 程式庫等工具上,但我們也一直在尋找平台上的方法,協助您實現願景。
動態桌布的內容處理
在 Android 16 中,动态壁纸框架将获得一个新的 content API,以应对由用户驱动的动态壁纸带来的挑战。目前,包含用户提供的内容的实时壁纸需要复杂的服务专用实现。Android 16 引入了 WallpaperDescription 和 WallpaperInstance。借助 WallpaperDescription,您可以识别同一服务中的动态壁纸的不同实例。例如,如果某张壁纸同时在主屏幕和锁定屏幕上显示,则这两种情况下显示的内容可能各不相同。壁纸选择器和 WallpaperManager 会使用此元数据更好地向用户呈现壁纸,从而简化创建多样化个性化动态壁纸体验的过程。
效能和電池
Android 16 推出 API,可協助收集應用程式的深入分析資料。
系統觸發的剖析
ProfilingManager 在 Android 15 中添加,让应用能够在现场使用 Perfetto 请求收集性能数据。不过,由于此性能分析必须从应用启动,因此应用很难或根本无法捕获启动或 ANR 等关键流程。
为此,Android 16 向 ProfilingManager 引入了系统触发的性能分析。应用可以注册接收特定触发器(例如冷启动 reportFullyDrawn 或 ANR)轨迹的兴趣,然后系统会代表应用启动和停止轨迹。轨迹完成后,结果会传送到应用的数据目录。
ApplicationStartInfo 中的啟動元件
ApplicationStartInfo 在 Android 15 中添加,可让应用查看进程启动原因、启动类型、启动时间、节流和其他实用诊断数据。Android 16 添加了 getStartComponent(),用于区分触发启动的组件类型,这有助于优化应用的启动流程。
更完善的工作自我檢查
JobScheduler#getPendingJobReason() API 会返回作业可能处于待处理状态的原因。不过,作业处于待处理状态的原因可能有多种。
在 Android 16 中,我们引入了一个新 API JobScheduler#getPendingJobReasons(int jobId),该 API 会返回作业处于待处理状态的多种原因,包括开发者设置的显式约束条件和系统设置的隐式约束条件。
我们还引入了 JobScheduler#getPendingJobReasonsHistory(int jobId),用于返回最新约束条件更改的列表。
我们建议您使用该 API 来调试作业可能无法执行的原因,尤其是在您发现某些任务的成功率降低或某些作业完成延迟存在 bug 时。例如,未能在后台更新微件,或在应用启动之前未能调用预加载作业。
这还有助于您更好地了解某些作业是否因系统定义的约束条件而无法完成,而不是因明确设置的约束条件而无法完成。
自動調整刷新率
Android 15 中引入的自适应刷新率 (ARR) 可让受支持硬件上的显示屏刷新率使用离散的 VSync 步长来适应内容帧速率。这不仅降低了功耗,还无需进行可能导致卡顿的模式切换。
Android 16 引入了 hasArrSupport() 和 getSuggestedFrameRate(int),同时恢复了 getSupportedRefreshRates(),以便您的应用更轻松地利用 ARR。RecyclerView 1.4 在从快速滑动或平滑滚动中稳定下来时会在内部支持 ARR,我们将继续努力,将 ARR 支持添加到更多 Jetpack 库中。这篇帧速率文章介绍了许多可用于设置帧速率的 API,以便您的应用可以直接使用 ARR。
ADPF 中的 Headroom API
SystemHealthManager 引入了 getCpuHeadroom 和 getGpuHeadroom API,旨在为游戏和资源密集型应用提供可用 CPU 和 GPU 资源的估算值。通过这些方法,您可以评估应用或游戏如何以最佳方式改善系统运行状况,尤其是在与用于检测热节流的其他 Android 动态性能框架 (ADPF) API 搭配使用时。
在受支持的设备上使用 CpuHeadroomParams 和 GpuHeadroomParams,您可以自定义用于计算余量的时间范围,并在平均资源可用性或最低资源可用性之间进行选择。这有助于您相应地减少 CPU 或 GPU 资源用量,从而提升用户体验并延长电池续航时间。
無障礙設定
Android 16 新增無障礙 API 和功能,可協助您將應用程式提供給每位使用者。
改良的 Accessibility API
Android 16 新增了其他 API,可強化使用者介面語意,協助依賴無障礙服務 (例如 TalkBack) 的使用者提升一致性。
加外框的文字,可盡可能提高文字對比度
低視力使用者通常對對比敏感度較低,因此很難從背景中辨識物體。為協助這類使用者,Android 16 引進了外框文字,取代高對比文字,這項功能會在文字周圍繪製較大的對比區域,大幅提升易讀性。
Android 16 包含新的 AccessibilityManager API,可讓應用程式檢查或註冊事件監聽器,瞭解是否已啟用此模式。這項功能主要適用於 Compose 等 UI 工具包,可提供類似的視覺體驗。如果您維護 UI 工具包程式庫,或應用程式執行會略過 android.text.Layout 類別的自訂文字算繪作業,則可使用此方法瞭解何時啟用輪廓文字。
新增至 TtsSpan 的時間長度
Android 16 會使用 TYPE_DURATION 擴充 TtsSpan,其中包含 ARG_HOURS、ARG_MINUTES 和 ARG_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
getChecked 和 setChecked(int) 方法現在除了支援「已勾選」和「未勾選」之外,也支援「部分勾選」狀態。這會取代已淘汰的布林值 isChecked 和 setChecked(boolean)。
補充說明
無障礙服務說明 ViewGroup 時,會結合其子項檢視畫面的內容標籤。如果您為 ViewGroup 提供 contentDescription,無障礙服務會假設您也要覆寫無法聚焦的子項檢視畫面的說明。如果您想標示下拉式選單 (例如「字型系列」),同時保留現有無障礙選項 (例如「Roboto」),這可能會造成問題。Android 16 新增了 setSupplementalDescription,讓您可以提供文字,提供 ViewGroup 的相關資訊,而不會覆寫其子項的資訊。
必填表單欄位
Android 16 會將 setFieldRequired 新增至 AccessibilityNodeInfo,讓應用程式可向無障礙服務指出表單欄位需要輸入內容。對於填寫各種表單的使用者來說,這都是重要的情境,即使是像條款和條件核取方塊這類簡單的項目,也能協助使用者一貫地識別並快速瀏覽必要欄位。
使用 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 控制白平設定,其中包含的選項僅限於預設清單,例如 Incandescent、Cloudy 和 Twilight。COLOR_CORRECTION_MODE_CCT 可讓您使用 COLOR_CORRECTION_COLOR_TEMPERATURE 和 COLOR_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) ...
}
以下範例顯示在套用不同色溫和色調調整後,相片的樣貌:
相機夜間模式場景偵測
为了帮助应用了解何时切换到夜间模式相机会话以及何时从夜间模式相机会话切换出,Android 16 添加了 EXTENSION_NIGHT_MODE_INDICATOR。如果受支持,则可在 Camera2 内的 CaptureResult 中使用。
这是我们在Instagram 如何让用户拍出令人惊艳的低光照片博文中提到的即将推出的 API。该博文提供了有关如何实现夜间模式的实用指南,并附有一份案例研究,该案例研究将应用内夜间模式照片质量的提升与通过应用内相机分享的照片数量的增加联系起来。
動態相片拍攝意圖動作
Android 16 添加了标准 intent 操作 ACTION_MOTION_PHOTO_CAPTURE 和 ACTION_MOTION_PHOTO_CAPTURE_SECURE,用于请求相机应用拍摄动态照片并将其返回。
您必须传递额外的 EXTRA_OUTPUT 来控制将图片写入的位置,或者通过 Intent.setClipData(ClipData) 传递 Uri。如果您未设置 ClipData,系统会在调用 Context.startActivity(Intent) 时将其复制到该位置。
Ultra 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 添加了 RuntimeColorFilter 和 RuntimeXfermode,让您可以创作阈值、Sepia 和 Hue Saturation 等复杂效果,并将其应用于绘制调用。从 Android 13 开始,您可以使用 AGSL 创建扩展 Shader 的自定义 RuntimeShader。新 API 反映了这一点,添加了由 AGSL 驱动的 RuntimeColorFilter(用于扩展 ColorFilter)和 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 加密和防範中間人攻擊的安全性強化功能。這可讓使用者在近距離用途 (例如解鎖筆電或車門) 時,更安全地使用這項功能。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+ 和用户定义的元数据
OpenAPV 项目提供了 APV 的参考实现。Android 16 将实现对 APV 422-10 配置文件的支持,该配置文件提供 YUV 422 色彩采样以及 10 位编码,并且目标比特率最高可达 2 Gbps。
隱私權
Android 16 包含多項功能,可協助應用程式開發人員保護使用者隱私。
「健康資料同步」更新
Health Connect 添加了 ACTIVITY_INTENSITY,这是一种根据世界卫生组织关于中等强度和剧烈强度活动的指南定义的数据类型。每个记录都需要提供开始时间、结束时间以及活动强度(中等或剧烈)。
Health Connect 还包含支持医疗记录的更新版 API。这样一来,应用便可在征得用户明确同意的情况下,读取和写入 FHIR 格式的医疗记录。
Android 版 Privacy Sandbox
Android 16 中集成了最新版本的 Privacy Sandbox on Android,这是我们持续致力于开发可让用户放心地知道其隐私受到保护的技术的一部分。您可以访问我们的网站,详细了解 Privacy Sandbox on Android 开发者 Beta 版计划,以便顺利上手。不妨了解 SDK 运行时,它可让 SDK 在与其所服务的应用分离的专用运行时环境中运行,从而为用户数据收集和共享提供更强的保护措施。
安全性
Android 16 包含多項功能,可協助您強化應用程式安全性,並保護應用程式資料。
金鑰共用 API
Android 16 添加了一些 API,这些 API 支持与其他应用共享对 Android Keystore 密钥的访问权限。新的 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 公釐」。
如要找到這些設定,請開啟「設定」應用程式,並依序前往「系統」>「語言與地區」。