[英]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.