如何合并行的后代文本和 TalkBack 按钮的内容?

问题描述 投票:0回答:1

我声明了一个Row,其中包含一个Text和一个Button,如下所示:

Row(
    modifier = Modifier.semantics(mergeDescendants = true) {}
) {
    Text("Date completed")
    Button(onClick = { }) {
        Text("November 2024")
    }
}

我希望 TalkBack 能够合并 TextButton 的内容,并在我选择 Row 时读取“日期完成于 2024 年 11 月”。事实并非如此。它确实允许我选择整个行作为单个元素,但当我选择Row时,它会显示“日期完成”。此外,它仍然提供 Button 作为单独可选择的项目。您可以通过运行 this 示例应用程序来查看所有这些的示例。

我可以为 RowTextButton 提供一些进一步的语义,以便当我选择 Row 时 TalkBack 会显示“日期完成日期为 2024 年 11 月”,并且它不提供 Button 作为单独可选的选项项目?

android-jetpack-compose accessibility talkback
1个回答
0
投票

我能想到的最好办法是手动设置RowcontentDescription并清除TextButtonsemantics,如下所示:

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)
    }
}

如果您知道更好、更自动的方法来合并Row的后代TextButton的内容以用于TalkBack,请分享🙏

© www.soinside.com 2019 - 2024. All rights reserved.