我有一个活动,使用以下代码将自定义视图添加到整个活动的视图中。
为了显示教练标记/用户提示屏幕。
我的自定义视图扩展自RelativeLayout,在其构造函数中添加了一个按钮,该按钮位于屏幕底部,当点击它时,会关闭视图。
我已经重写了 "dispatchDraw" 方法,以便可以在特定位置将多个教练标记 UI 对象 (textviews 和 bitmaps) 添加到布局中。这些教练标记对象使用以下代码在视图上绘制自己。
问题:当TalkBack启用时
activity.getWindow().getDecorView()).addView(newView)
为了显示教练标记/用户提示屏幕。
我的自定义视图扩展自RelativeLayout,在其构造函数中添加了一个按钮,该按钮位于屏幕底部,当点击它时,会关闭视图。
我已经重写了 "dispatchDraw" 方法,以便可以在特定位置将多个教练标记 UI 对象 (textviews 和 bitmaps) 添加到布局中。这些教练标记对象使用以下代码在视图上绘制自己。
canvas.save();
canvas.translate(positioning[0], positioning[1]);
textView.draw(canvas);
canvas.restore();
canvas.save();
canvas.drawBitmap(bitmap, positioning[2], positioning[3], new Paint());
canvas.restore();
问题:当TalkBack启用时
- 当此教练标记视图显示时,没有任何内容被朗读出来
- 如果用户按下文本视图和位图所在的位置,则不会朗读出任何内容
然而,当用户按下按钮时,按钮的contentDescription会被朗读出来。
我认为textViews和Bitmaps没有被朗读出来的原因是由于它们在画布上由上述代码渲染的方式。
问题1:是否有办法让TalkBack在单击textview和bitmap时朗读出内容? - 我已经尝试设置textviews和bitmaps的contentDescriptions和focusable,但这没有任何区别。
问题2:另一种方法是在自定义视图显示时让TalkBack读出一些内容,并且这些文本可以总结屏幕上显示的所有教练标记。我无法弄清楚如何做到这一点,有人有什么建议吗? - 我已经尝试将我的customView设置为可聚焦(setFocasable(true))并给它一个contentDescription,但这并不起作用。 - 当自定义视图被绘制时,我尝试发起一个操作,然后添加一个事件的content description,但这也不起作用,即
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_CLICKED);
}
@Override
public void onInitializeAccessibilityNodeInfo (AccessibilityNodeInfo info) {
super.onInitializeAccessibilityNodeInfo(info);
// this is not read out load when the view is displayed, but is read when the view is pressed
info.setContentDescription("on Initialize Accessibility Node Info User Tips");
}