无障碍与语义

大约 1 分钟约 415 字

无障碍与语义

Kuikly Compose 通过 Semantics 向无障碍服务与自动化测试暴露节点的语义信息。

与自研 DSL 的关系

自研 DSL 的无障碍能力由 accessibility / accessibilityRole / testTag 等属性提供(见基础属性和事件)。Compose DSL 使用本篇的语义 Modifier,两者 API 形态不同但作用一致。

Modifier.semantics

为节点追加语义信息,可选择是否合并子节点语义。

参数描述类型
mergeDescendants 非必需是否将自身与子树合并为一个逻辑实体,常见于按钮、表单等需要整体聚焦的元素Boolean
properties 必需语义属性设置SemanticsPropertyReceiver.() -> Unit

合并语义的影响

mergeDescendants = true 时,子树中未标记合并的节点会从语义树中消失,其属性被合并到父节点(例如文本类属性会以逗号拼接)。

Modifier.clearAndSetSemantics

清除所有后代节点的语义,并设置新的语义。用于把一组细碎的可聚焦元素(如多个小按钮)收敛为一个语义实体。

参数描述类型
properties 必需语义属性设置SemanticsPropertyReceiver.() -> Unit

Modifier.testTag

设置测试标识,供 Appium 等自动化测试定位节点使用。

参数描述类型
tag 必需测试标识String

示例

Text(
    text = "提交",
    modifier = Modifier
        .testTag("submit_button")
        .semantics(mergeDescendants = true) {
            contentDescription = "提交按钮"
        }
)

将卡片内的多个小按钮合并为单一语义实体:

Card(
    modifier = Modifier.clearAndSetSemantics {
        contentDescription = "商品卡片,点击查看详情"
        onClick { /* 处理点击 */ true }
    }
) {
    // 内部零散的图标与文本
}