我正在努力使HubDisclaimerView可以通过TalkBack访问,并且“按钮”或“链接”的角色没有被应用。
我已经设置了一个内容描述来宣布文本是什么,但视图不是从Button或ImageView继承的。它确实有onClickListener
和isClickable=true
。但在对讲模式或本地上下文菜单中没有显示“双击到...”、“按钮”或“链接”辅助功能。
我想知道是否有一个修复使一个自定义视图链接的可访问性的目的?AccessibilityEvent API似乎不是正确的方向,因为我希望将它添加到充当术语和条件链接的列表中的一行中。
您可以在OnInitializeAccessibilitynodeInfo()
中添加信息,以告诉辅助功能服务(如Talkback)视图是可单击的。我没有您的代码,但编写了一个微不足道的自定义视图来演示这一点:
class MyTextView : TextView {
constructor(context: Context) : super(context)
constructor(context: Context, attrs: AttributeSet) : super(context, attrs)
constructor(context: Context, attrs: AttributeSet, defStyle: Int) : super(context, attrs, defStyle)
// ... other override methods
override fun onInitializeAccessibilityNodeInfo(info: AccessibilityNodeInfo?) {
super.onInitializeAccessibilityNodeInfo(info)
// With `null` as the second argument to `AccessibilityAction`, Talkback announces
// "double tap to activate". If a custom string is provided,
// Talkback announces "double tap to <custom string>".
val customClick = AccessibilityAction(AccessibilityNodeInfo.ACTION_CLICK, "foo")
info?.addAction(customClick)
}
}
没有真正的理由添加一个角色,因为Talkback将通过这个小改动来发布“双击到X”的公告。如果你真的想要设置角色,你可以这样做(但是我不确定这样做是否有什么收获):
override fun getAccessibilityClassName(): CharSequence {
return Button::class.java.name
}
这使得Talkback在公告中添加“按钮”,但以这种方式添加角色是一种攻击。不能保证Talkback会因为您设置了AccessibilityClassName
而继续将视图作为按钮宣布。继续添加accessibilitynodeInfo.action_click
。