我使用的Viewpager由一些相对复杂的相对布局兄弟组成。Android AccessibilityDelegate阅读ViewGroup而不是儿童
如果我点击相对布局,它会突出显示整个页面,并按照预期逐个读取标题和几个文字浏览。
如果我滚动viewpager,我希望talkback以同样的方式阅读下一页,如果我点击,它会读取第一页。其次,如果我滚动到第二,第三等页面并单击这些布局,反馈将按预期阅读。
我正试图实现滚动事件完成后的点击行为。
下面是我对accessibilityDelegate的看法。
viewPager.setAccessibilityDelegate(new AccessibilityDelegate() {
@Override
public boolean onRequestSendAccessibilityEvent(ViewGroup host, View child, AccessibilityEvent event) {
if (event.getEventType() == AccessibilityEvent.TYPE_VIEW_SCROLLED) {
View page = viewPager.getCurrentPageView();
performAccessibilityAction(page, AccessibilityNodeInfo.ACTION_CLICK, Bundle.EMPTY);
}
return super.onRequestSendAccessibilityEvent(host, child, event);
}
});
我已验证'page'是RelativeLayout父母,我认为它是。 我也确认onRequestSendAccessibilityEvent
被解雇,但它没有读取其子女的内容。我错过了什么吗?
更新
我使用
viewpager.getCurrentPageView().sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_FOCUSED);
,当我需要强制对讲重读一个项目上面工作了另一个例子也试过,但没有任何影响,如果我尝试它在页面上。
感谢
这是否意味着我需要手动递归通过所有子节点并获取内容描述? –
我使用onInitializeAccessibilityNodeInfo,onInitializeAccessibilityEvent,onPopulateAccessibilityEvent和onRequestSendAccessibilityEvent设置了可访问性委托。唯一被触发的是onRequestSendAccessibilityEvent。如果我在第一次读取的事件上设置了内容描述,但它看起来像事件被重用,并且它不读取第二,第三和第二次事件中设置的contentDescription。 –