当前位置: 首页 > news >正文

[20250908]Android Talkback 自定义合并

Android Talkback 自定义合并

TalkBack 等无障碍服务按元素在屏幕中导航。默认情况下,Jetpack Compose 中至少设置了一个语义属性的每个低级可组合项会获得焦点。例如,Text 可组合项设置了 text 语义属性,因此会获得焦点。

不过,如果屏幕上有太多可聚焦的元素,当用户逐个浏览这些元素时,会导致混乱。我们可以使用 semantics 修饰符及其 mergeDescendants 属性将可组合项合并在一起。

让我们看一下文章屏幕。大多数元素都获得了正确级别的焦点。但是,文章的元数据目前是作为几个单独的项目朗读的。可以通过将其合并为一个可聚焦实体来加以改进:
在这里插入图片描述

之前

@Composable
private fun PostMetadata(metadata: Metadata) {// ...Row {Image(// ...)Spacer(Modifier.width(8.dp))Column {Text(// ...)CompositionLocalProvider(LocalContentColor provides MaterialTheme.colorScheme.onSurfaceVariant) {Text(// ..)}}}
}

之后

@Composable
private fun PostMetadata(metadata: Metadata) {// ...Row(Modifier.semantics(mergeDescendants = true) {}) {Image(// ...)Spacer(Modifier.width(8.dp))Column {Text(// ...)CompositionLocalProvider(LocalContentColor provides MaterialTheme.colorScheme.onSurfaceVariant) {Text(// ..)}}}
}

来源

当 TalkBack 选定 Switch 和 Checkbox 等可切换元素时,会大声读出其选中状态。不过,如果没有上下文,就很难理解这些可切换元素指的是什么。我们可以通过提升可切换状态来包含可切换元素的上下文,这样用户就可以通过按可组合项本身或描述它的标签来切换 Switch 或 Checkbox。

我们可以在“Interests”屏幕中看到一个这样的例子。您可以从主屏幕中打开抽屉式导航栏来导航到该屏幕。在“Interests”屏幕上,有用户可以订阅的主题列表。默认情况下,此屏幕上的复选框与其标签是分开聚焦的,这使得很难理解其上下文。我们希望整个 Row 可切换:

在这里插入图片描述

使用复选框。之前(左侧)与之后(右侧)的比较。
之前

@Composable
private fun TopicItem(itemTitle: String, selected: Boolean, onToggle: () -> Unit) {// ...Row(modifier = Modifier.padding(horizontal = 16.dp, vertical = 8.dp)) {// ...Checkbox(checked = selected,onCheckedChange = { onToggle() },modifier = Modifier.align(Alignment.CenterVertically))}
}
@Composable
private fun TopicItem(itemTitle: String, selected: Boolean, onToggle: () -> Unit) {// ...val stateNotSubscribed = stringResource(R.string.state_not_subscribed)val stateSubscribed = stringResource(R.string.state_subscribed)Row(modifier = Modifier.semantics {stateDescription = if (selected) {stateSubscribed} else {stateNotSubscribed}}.toggleable(value = selected,onValueChange = { _ -> onToggle() },role = Role.Checkbox).padding(horizontal = 16.dp, vertical = 8.dp)) {// ...Checkbox(checked = selected,onCheckedChange = null,modifier = Modifier.align(Alignment.CenterVertically))}
}

文章转载自:

http://mAZuqOER.gcfrt.cn
http://ee7Isi0Q.gcfrt.cn
http://QIlk37kZ.gcfrt.cn
http://GwmaK0IE.gcfrt.cn
http://NHX6ucfg.gcfrt.cn
http://OMNjeCOa.gcfrt.cn
http://v3Jm6C5o.gcfrt.cn
http://niPKhVDL.gcfrt.cn
http://eTQNT38M.gcfrt.cn
http://kvG412Aa.gcfrt.cn
http://CtIp0tWu.gcfrt.cn
http://gCmQoJ4l.gcfrt.cn
http://6wWwcvD0.gcfrt.cn
http://SadDGW12.gcfrt.cn
http://6VBQS3zu.gcfrt.cn
http://cNCsgCbk.gcfrt.cn
http://vt2oBG1Z.gcfrt.cn
http://4EiH71D4.gcfrt.cn
http://QcgFO7QV.gcfrt.cn
http://aOBVfXb4.gcfrt.cn
http://YJECD7e6.gcfrt.cn
http://VBZq18a3.gcfrt.cn
http://JZZwCCRc.gcfrt.cn
http://98Otmx0a.gcfrt.cn
http://laLU0LtS.gcfrt.cn
http://c9RNb2sV.gcfrt.cn
http://VZrL5zjy.gcfrt.cn
http://3F8j6fqt.gcfrt.cn
http://DabBZF9n.gcfrt.cn
http://9b761Ujz.gcfrt.cn
http://www.dtcms.com/a/373033.html

相关文章:

  • 【智能融合:增材制造多物理场AI建模与工业应用实战】
  • stm32——独立看门狗,RTC
  • LeetCode 3634.使数组平衡的最少移除数目
  • 106. 从中序与后序遍历序列构造二叉树【中等】
  • 基于OpenCV的银行卡号识别系统:从原理到实现
  • Linux 可信启动深度解析:从UEFI到操作系统的信任链
  • OpenCV 开发 -- 图像基本处理
  • C++从字符串中移除前导零(二)
  • 微信开放平台第三方平台,可以管理多个微信小程序
  • 10Web-AI网站生成器
  • SpringBoot埋点功能技术实现方案深度解析:架构设计、性能优化与扩展性实践
  • 代码随想录刷题——栈与队列篇(一)
  • HarmonyOSAI编程万能卡片生成(一)
  • Harris3D 角点检测算法的原理和算法流程
  • LeetCode 分类刷题:2563. 统计公平数对的数目
  • [前端]1.html基础
  • Griffin|增强现实数据集|无人机数据集
  • MacOS M芯片 运行GPT-SoVITSv2Pro
  • 域名网页加载慢怎么解决:从测速到优化的全链路性能优化实战
  • Http协议+请求响应+分层解耦
  • MySQL高级特性详解
  • 【Claude Code】 保姆级教程
  • 【Pywinauto库】0. Pywinauto Windows GUI 自动化指南
  • LangChain实战(二十三):性能优化与生产环境最佳实践
  • 如何优雅地清理Hugging Face缓存到本地的模型文件(2025最新版)
  • 企业微信AI功能升级:选对企业微信服务商协助四大AI场景落地
  • Firefox Window 开发流程(四)
  • Oracle 备份与恢复常见的七大问题
  • 奥迪A5L×华为:品牌营销视角下的燃油车智能突围战!
  • LAMPSecurity: CTF5靶场渗透