我声明了一个Row,其中包含一个Text和一个Button,如下所示:
Row(
modifier = Modifier.semantics(mergeDescendants = true) {}
) {
Text("Date completed")
Button(onClick = { }) {
Text("November 2024")
}
}
我希望 TalkBack 能够合并 Text 和 Button 的内容,并在我选择 Row 时读取“日期完成于 2024 年 11 月”。事实并非如此。它确实允许我选择整个行作为单个元素,但当我选择Row时,它会显示“日期完成”。此外,它仍然提供 Button 作为单独可选择的项目。您可以通过运行 this 示例应用程序来查看所有这些的示例。
我可以为 Row、Text 和 Button 提供一些进一步的语义,以便当我选择 Row 时 TalkBack 会显示“日期完成日期为 2024 年 11 月”,并且它不提供 Button 作为单独可选的选项项目?
我能想到的最好办法是手动设置Row的contentDescription并清除Text和Button的semantics,如下所示:
val labelText = "Date completed"
val buttonText = "November 2024"
Row(
modifier = Modifier.semantics { contentDescription = "$labelText $buttonText. Button. Double-tap to activate." },
) {
Text(
text = labelText,
modifier = Modifier.clearAndSetSemantics { },
)
Button(
onClick = { },
modifier = Modifier.clearAndSetSemantics { },
) {
Text(buttonText)
}
}