我有一个活动,它使用以下代码将自定义视图添加到整个活动的视图中
activity.getWindow().getDecorView()).addView(newView)
为了显示教练标记/用户提示屏幕。
我的自定义视图从 RelativeLayout 扩展,并在其构造函数中在屏幕底部添加了一个按钮,单击该按钮会关闭视图。
我已经覆盖了“dispatchDraw”方法,这样我就可以将多个coachmark UI 对象(文本视图和位图)添加到特定位置的布局中。这些 coachmark 对象使用如下代码在视图上绘制自己
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:当点击 textview 和 bitmaps 时,有没有办法让 TalkBack 大声说出来?- 我尝试为 textviews 和 bitmaps 设置 contentDescriptions 和 focusable ,但这没有任何区别。
问题 2:另一种方法是让 TalkBack 在显示自定义视图时读出一些内容,并且此文本可以总结屏幕上显示的所有指导标记。我不知道该怎么做,有人有什么建议吗?- 我已经尝试将我的 customView 设置为可聚焦(setFocasable(true) 并给它一个 contentDescription,但这不起作用。 - 我尝试在绘制自定义视图时发起一个操作,然后向事件添加内容描述,但这也不起作用,即
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");
}