如何让无障碍读屏器同时播报视图的已按压状态
实现方案
1. 基础布局属性配置
首先给ImageView配置基础无障碍属性,明确标记为可交互的按钮类控件:
<ImageView android:id="@+id/customBtnIv" android:layout_width="wrap_content" android:layout_height="wrap_content" android:clickable="true" android:focusable="true" android:accessibilityTraits="button" android:contentDescription="@string/btn_function_desc" />
contentDescription填写按钮的核心功能即可,比如「收藏按钮」,不要包含状态描述,状态信息会由系统自动拼接播报
2. 状态同步与无障碍事件通知
点击切换状态时,同步更新控件的selected属性,同时通知无障碍服务状态变更,触发读屏器播报:
customBtnIv.setOnClickListener { // 切换选中状态 val isActivated = !customBtnIv.isSelected customBtnIv.isSelected = isActivated // 切换背景:如果使用StateListDrawable关联selected状态,可省略手动改背景的步骤 customBtnIv.background = if (isActivated) orangeBackground else normalBackground // 发送状态变更事件,触发读屏播报 customBtnIv.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_SELECTED) }
3. 自定义状态播报(可选)
如果系统默认的状态播报不符合业务需求,可以重写控件的onPopulateAccessibilityEvent方法自定义播报文本:
class StateImageView @JvmOverloads constructor( context: Context, attrs: AttributeSet? = null ) : AppCompatImageView(context, attrs) { override fun onPopulateAccessibilityEvent(event: AccessibilityEvent) { super.onPopulateAccessibilityEvent(event) if (event.eventType == AccessibilityEvent.TYPE_VIEW_SELECTED) { event.text.add(if (isSelected) "已激活" else "未激活") } } }
内容的提问来源于stack exchange,提问作者s k
相关产品推荐
相关产品推荐

