我正致力于改善应用内的辅助功能。
我的卡布局相当复杂。每张卡片里面都有一些可点击的对象,但它也有全局点击监听器。
当我启用对讲时,选择卡(不是里面的东西!),双击(打开卡),卡在卡的中间获得触摸事件。 结果,嵌套对象得到了click事件并分别作出反应。
问题是如何确定哪个项目在TalkBack的焦点中(绿色矩形对我而言)?如果卡本身是焦点,那么这个想法是禁用内部触摸侦听器。
我想支持的API级别是 16 (Android 4.1 +)
谢谢!
答案 0 :(得分:4)
我认为最适合您的方法是覆盖布局视图的辅助功能委托,监听辅助功能焦点事件。将焦点添加到卡片时,请移除侦听器,当焦点离开您的卡片时,重新连接您的听众。将此委托附加到您的布局视图,您应该能够观察布局中的各种视图,并放弃可访问性焦点。
class MyAccessibilityDelegate extends View.AccessibilityDelegate {
@Override
public boolean onRequestSendAccessibilityEvent(ViewGroup viewGroup, View child, AccessibilityEvent event) {
if (event.getEventType() == AccessibilityEvent.TYPE_VIEW_ACCESSIBILITY_FOCUSED) {
//Do stuff in here! Maybe also do different stuff when focus is cleared!
}
return super.onRequestSendAccessibilityEvent(viewGroup, child, event);
}
}
此API的API已添加到API级别14中,因此您应该很高兴!