簡體   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