设置importantForAccessibility=no后Talkback仍读取装饰ImageView问题
解决Talkback播报装饰性ImageView的问题
针对你遇到的三星设备上Talkback仍读取已标记为importantForAccessibility="no"的装饰性ImageView问题,可尝试以下几种解决方案:
1. 给父LinearLayout设置自定义无障碍描述
直接指定LinearLayout的contentDescription为TextView的文本,覆盖Talkback自动生成的合并描述:
<LinearLayout android:id="@+id/savingsLayout" android:layout_width="match_parent" android:layout_height="wrap_content" android:importantForAccessibility="yes" android:contentDescription="@string/savings_amount_text" android:orientation="vertical"> <ImageView android:id="@+id/savingsIcon" android:layout_width="..." android:layout_height="..." android:importantForAccessibility="no" android:src="@drawable/ic_logo" /> <TextView android:id="@+id/savingsAmount" android:layout_width="..." android:layout_height="..." android:importantForAccessibility="no" tools:text="You saved £7.15 this time" /> </LinearLayout>
如果文本是动态生成的,可在代码中设置:
savingsLayout.contentDescription = savingsAmount.text
2. 给ImageView添加空的contentDescription
部分厂商定制的Talkback可能会忽略importantForAccessibility="no",额外设置空描述可以彻底阻止图片被识别:
<ImageView android:id="@+id/savingsIcon" android:layout_width="..." android:layout_height="..." android:importantForAccessibility="no" android:contentDescription="@null" android:src="@drawable/ic_logo" />
3. 禁用ImageView的无障碍实时区域
添加android:accessibilityLiveRegion="none",确保图片不会触发任何无障碍事件:
<ImageView android:id="@+id/savingsIcon" android:layout_width="..." android:layout_height="..." android:importantForAccessibility="no" android:contentDescription="@null" android:accessibilityLiveRegion="none" android:src="@drawable/ic_logo" />
4. 调整TextView的无障碍属性(可选)
如果你希望TextView的文本直接作为父布局的播报内容,也可以移除TextView的importantForAccessibility="no",同时确保父布局的accessibilityTraversalBefore/After等属性不会干扰,但优先推荐前三种方法,因为它们更直接控制整体播报内容。
内容的提问来源于stack exchange,提问作者Emmaaa
相关产品推荐
相关产品推荐

