[英]Jetpack compose accessibility with switch role
我正在尝试获得类似于 XML 的画外音:
预期结果是“Sometext on switch”或“Sometext off switch”。
在 Jetpack Compose 中,如果您双击它(使用对讲更改状态)并再次单击或滑动(到下一个和返回),它会显示“关闭 sometext off switch”,它会显示“On sometext off switch”。
此外,双击并更改 state 为开/关(如 XML)后没有声音。
var isChecked by remember { mutableStateOf(false) }
val toggleModifier =
Modifier.toggleable(
value = isChecked,
onValueChange = { isChecked = it },
role = Role.Switch
)
Box(modifier = Modifier.fillMaxSize()) {
val rowModifier = toggleModifier
.padding(16.dp)
.align(Alignment.Center)
Row(modifier = rowModifier) {
Text(text = "Sometext")
Switch(checked = isChecked, onCheckedChange = null)
}
}
第二个想法是将文本和开关与mergeDescendants结合起来,但它们是分开选择的:
var isChecked by remember { mutableStateOf(false) }
val toggleModifier =
Modifier.semantics(mergeDescendants = true) {}
Box(modifier = Modifier.fillMaxSize()) {
val rowModifier = toggleModifier
.padding(16.dp)
.align(Alignment.Center)
Row(modifier = rowModifier) {
Text(text = "Sometext")
Switch(checked = isChecked, onCheckedChange = { isChecked = !isChecked })
}
}
正如 Utkarsh Tiwari 在评论中提到的,它是 compose 错误,尚未修复。 他们建议暂时使用Role.Checkbox
,它按预期工作。 或者根本不使用角色
顺便说一句,最好使用Modifier.then(rowModifier)
,然后只使用modifier = rowModifier
。 所以最后它应该是这样的
Row(modifier = Modifier
.semantics(mergeDescendants = true) {}
.then(rowModifier)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.