Jetpack组合可访问性与切换角色



我想要一个类似于XML的画外音:

  1. 首先显示文本
  2. 则开关状态

预期结果是"Sometext on switch"或"Sometext off switch">

在Jetpack Compose中,它显示"Off sometext Off switch";如果你双击它(使用对讲来改变状态),然后再次点击或滑动(到下一个和返回),它会显示"On sometext off switch"。

而且,双击并将状态更改为开/关(如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在评论中提到的,这是一个组合错误,尚未修复。他们建议暂时使用Role.Checkbox代替,它的工作原理与预期一样。或者根本不使用role

顺便说一句,用Modifier.then(rowModifier)比只用modifier = rowModifier好。最后应该是

Row(modifier = Modifier
.semantics(mergeDescendants = true) {}
.then(rowModifier)

相关内容

  • 没有找到相关文章