次のコードを使用して、アクティビティのビュー全体にカスタム ビューを追加するアクティビティがあります。
activity.getWindow().getDecorView()).addView(newView)
コーチ マーク/ユーザー ヒントの画面を表示するため。
私のカスタム ビューは RelativeLayout から拡張され、そのコンストラクターでは、クリックするとビューを閉じるボタンが画面の下部に追加されます。
「dispatchDraw」メソッドを上書きして、レイアウトの特定の場所に複数のコーチマーク UI オブジェクト (テキストビューとビットマップ) を追加できるようにしました。これらのコーチマーク オブジェクトは、次のようなコードを使用してビューに描画されます。
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 に何かを発声させる方法はありますか? - テキストビューとビットマップに 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");
}