Android Compose中如何在无障碍模式下判断元素是否获得焦点?
Compose中捕获无障碍模式下的焦点状态变化
普通的focusable()和onFocusChanged监听的是键盘/触摸交互的焦点,而无障碍模式(如TalkBack)下的焦点属于独立的无障碍焦点体系,所以你之前的代码无法捕获到无障碍焦点变化。
要监听无障碍模式下的焦点状态,需要通过Modifier.semantics来操作组件的语义属性,这是Compose组件与无障碍服务交互的核心入口。
正确实现代码
Text( text = "message", modifier = Modifier .semantics { // 标记组件可被无障碍服务聚焦 isFocusable = true // 监听无障碍焦点变化回调 onFocusedChanged { isAccessibilityFocused -> if (isAccessibilityFocused) { // 此处执行无障碍模式下获得焦点后的操作 // do stuff } } } )
补充说明
- 如果需要同时处理普通焦点和无障碍焦点,可以在Modifier中同时保留
focusable().onFocusChanged { ... }和上述语义监听逻辑。 - 确保使用的Compose版本在
1.2.0及以上,部分语义API在旧版本中可能存在兼容性问题。
内容的提问来源于stack exchange,提问作者Dipsy
相关产品推荐
相关产品推荐

