繁体   English   中英

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

[英]Jetpack compose accessibility with switch role

我正在尝试获得类似于 XML 的画外音:

  1. 首先公布案文
  2. 然后state的开关

预期结果是“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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM