clu*_*ser 3 java android accessibility talkback android-studio
我正在使用一个viewpager,它由一些相当复杂的相对布局兄弟组成。
如果我单击相对布局,它将突出显示整个页面并按预期依次读取标题和一些文本视图。
如果我滚动视图页面,我希望对讲以与单击第一页相同的方式阅读下一页。其次,如果我滚动到第二、第三等页面并单击这些布局,对讲将按预期读取。
我试图在滚动事件完成后实现点击行为。
这是我的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);
}
});
Run Code Online (Sandbox Code Playgroud)
我已经验证“page”是我认为的RelativeLayout 父级。我还确认正在onRequestSendAccessibilityEvent被解雇,但它不会读取其子项的内容。我错过了什么吗?
更新
我也尝试过使用
viewpager.getCurrentPageView().sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_FOCUSED);
Run Code Online (Sandbox Code Playgroud)
当我需要强制对讲重读单个项目时,上面的内容适用于另一个示例,但如果我在页面上尝试它,则不会产生任何影响。
谢谢
一些背景 - 当您点击相关布局时,TalkBack 会根据布局的内容生成语音。在 ICS 上,这是由 HOVER_ENTER 事件触发的。在 Jelly Bean 上,它是由 ACCESSIBILITY_FOCUS 事件触发的。这些事件由框架自动发送,一般来说,永远不应该从应用程序手动发送。FOCUS 事件也是如此,除了自定义视图的特殊情况(有关更多详细信息,请参阅Google I/O 2013 的辅助功能演讲)。
那么,回到主题。
您可以通过使用您想要阅读的文本填充传出事件来控制 SCROLLED 事件的语音。这样做的缺点是,您需要手动生成要阅读的文本,并且如果用户触摸布局,该文本很可能与 TalkBack 读取的文本不同。
viewPager.setAccessibilityDelegate(new AccessibilityDelegate () {
@Override
public void onPopulateAccessibilityEvent(View host, AccessibilityEvent event) {
super.onPopulateAccessibilityEvent(host, event);
if (event.getEventType() == AccessibilityEvent.TYPE_VIEW_SCROLLED) {
event.setContentDescription(/** your text */);
}
}
});
Run Code Online (Sandbox Code Playgroud)
另一种选择是不执行任何操作,让用户自行探索视图。这是 Android 可访问性的首选交互模型。
编辑: 视频网址已损坏,已更改。
| 归档时间: |
|
| 查看次数: |
10374 次 |
| 最近记录: |