You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jetpack Compose中Horizontal Pager的无障碍访问自定义需求

Horizontal Pager 无障碍访问自定义实现方案

1. 屏蔽部分可见项的无障碍事件

仅让当前选中页面响应无障碍事件,非当前页直接清除语义信息,使无障碍服务忽略它们:

val pagerState = rememberPagerState(pageCount = { 5 })

HorizontalPager(state = pagerState) { page ->
    val isCurrentPage = page == pagerState.currentPage
    PageContent(
        modifier = Modifier
            .then(
                if (!isCurrentPage) {
                    // 清除非当前页的所有语义属性,使其不被无障碍服务识别
                    Modifier.semantics { clearAndSetSemantics { } }
                } else {
                    Modifier
                }
            ),
        pageNumber = page
    )
}

2. 控制焦点移动到下方文本

阻止焦点在Pager项之间跳转,同时让下方文本成为焦点目标:

val focusRequester = remember { FocusRequester() }

// 下方需要获取焦点的文本
Text(
    text = "Pager下方的文本内容",
    modifier = Modifier
        .focusRequester(focusRequester)
        .focusable() // 必须设置为可聚焦状态
)

// 在Pager的item中添加焦点属性控制
HorizontalPager(state = pagerState) { page ->
    val isCurrentPage = page == pagerState.currentPage
    PageContent(
        modifier = Modifier
            .focusProperties {
                // 当前页的上下焦点跳转直接取消,引导焦点流向外部文本
                next = if (isCurrentPage) FocusRequester.Cancel else FocusRequester.Default
                previous = if (isCurrentPage) FocusRequester.Cancel else FocusRequester.Default
            }
            .then(/* 之前的语义控制modifier */),
        pageNumber = page
    )
}

3. 滑动选中时触发无障碍播报

监听Pager页面切换事件,主动调用无障碍播报:

val context = LocalContext.current

LaunchedEffect(pagerState.currentPage) {
    // 页面切换时播报当前页信息,可根据实际内容自定义文案
    context.announceForAccessibility("已切换到第${pagerState.currentPage + 1}页")
}

额外注意事项

  • 确保当前页内容语义完整:如果页面内有需要无障碍播报的元素(如按钮、标题),不要清除当前页的语义,保留元素自身的无障碍属性。
  • 测试验证:打开系统无障碍服务(如TalkBack),测试焦点移动、页面滑动时的播报是否符合预期。
  • 精细焦点控制:如果需要更灵活的焦点管理,可以结合FocusManager手动调整焦点流向。

内容的提问来源于stack exchange,提问作者Ankita

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 13:31:06