您好,我正在尝试使用撰写语义使对讲从 Text() 读出文本并从 Switch() 读出默认行。这是我的代码:
var toggle by remember {
mutableStateOf(true)
}
Column(
modifier = Modifier.fillMaxSize(),
) {
Row(
modifier = Modifier
.fillMaxWidth()
.wrapContentHeight()
.semantics(mergeDescendants = true) {
isTraversalGroup = true
},
) {
Text(
modifier = Modifier.semantics {
traversalIndex = 1f
},
text = "Show my name.",
)
Switch(
modifier = Modifier.semantics {
traversalIndex = 2f
},
checked = toggle,
onCheckedChange = { toggle = !toggle },
)
}
}
由于某种原因,只有文本被读出,而开关的默认行被忽略。 我的目标是让它读起来像“显示我的名字。开/关开关双击进行切换”。一气呵成。我怎样才能实现这个目标?
根据文档:
实现 Switch、RadioButton 或 Checkbox 等选择控件时,通常会将可单击行为提升到父容器,将可组合项上的单击回调设置为 null,并向父可组合项添加可切换或可选择修饰符。
因此,在您的情况下,在行上使用
toggleable
修饰符看起来像:
var toggle by remember {
mutableStateOf(true)
}
Column(
modifier = Modifier.fillMaxSize(),
) {
Row(
modifier = Modifier
.fillMaxWidth()
.wrapContentHeight()
.toggleable(
value = toggle,
role = Role.Switch,
onValueChange = { toggle = !toggle }
)
) {
Text(
text = "Show my name.",
modifier = Modifier
.weight(1f)
.align(Alignment.CenterVertically)
)
Switch(
checked = toggle,
onCheckedChange = null,
)
}
}
我也尝试了基本的键盘功能,它似乎有效:
adb shell input keyevent KEYCODE_TAB # navigate
adb shell input keyevent KEYCODE_ENTER # toggle
如果通知的顺序与您有关(“开启、[文本]、切换”),请注意,该顺序可以通过 TalkBack 的用户设置进行修改,并且是屏幕阅读器 (TalkBack) 上计算的结果。