Android中如何让对讲读出文本并一起切换?

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

您好,我正在尝试使用撰写语义使对讲从 Text() 读出文本并从 Switch() 读出默认行。这是我的代码:

var toggle by remember {
                mutableStateOf(true)
            }
            Column(
                modifier = Modifier.fillMaxSize(),
            ) {
                Row(
                    modifier = Modifier
                        .fillMaxWidth()
                        .wrapContentHeight()
                        .semantics(mergeDescendants = true) {
                            isTraversalGroup = true
                        },
                ) {
                    Text(
                        modifier = Modifier.semantics {
                            traversalIndex = 1f
                        },
                        text = "Show my name.",
                    )
                    Switch(
                        modifier = Modifier.semantics {
                            traversalIndex = 2f
                        },
                        checked = toggle,
                        onCheckedChange = { toggle = !toggle },
                    )
                }
            }

由于某种原因,只有文本被读出,而开关的默认行被忽略。 我的目标是让它读起来像“显示我的名字。开/关开关双击进行切换”。一气呵成。我怎样才能实现这个目标?

android accessibility semantics talkback
1个回答
1
投票

根据文档

实现 Switch、RadioButton 或 Checkbox 等选择控件时,通常会将可单击行为提升到父容器,将可组合项上的单击回调设置为 null,并向父可组合项添加可切换或可选择修饰符。

因此,在您的情况下,在行上使用

toggleable
修饰符看起来像:

    var toggle by remember {
        mutableStateOf(true)
    }
    Column(
        modifier = Modifier.fillMaxSize(),
    ) {
        Row(
            modifier = Modifier
                .fillMaxWidth()
                .wrapContentHeight()
                .toggleable(
                    value = toggle,
                    role = Role.Switch,
                    onValueChange = { toggle = !toggle }
                )
        ) {
            Text(
                text = "Show my name.",
                modifier = Modifier
                    .weight(1f)
                    .align(Alignment.CenterVertically)
            )
            Switch(
                checked = toggle,
                onCheckedChange = null,
            )
        }
    }

我也尝试了基本的键盘功能,它似乎有效:

adb shell input keyevent KEYCODE_TAB    # navigate
adb shell input keyevent KEYCODE_ENTER  # toggle

如果通知的顺序与您有关(“开启、[文本]、切换”),请注意,该顺序可以通过 TalkBack 的用户设置进行修改,并且是屏幕阅读器 (TalkBack) 上计算的结果。

A test android app with three elements in a column, a text view with 'element 1', the element in question, a text view with a switch, and a third text view with 'element 3.' The screen read goes to the switch row which reads 'On, Show My Name, Switch.' and when toggled, it goes 'Off'

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