6

次のコードを使用して、アクティビティのビュー全体にカスタム ビューを追加するアクティビティがあります。

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");
}
4

1 に答える 1

10

私は最近、同様の問題に取り組んでいます。

簡単な答えは、View.announceForAccessibility(text)Android API 16 以降を使用していると仮定して、TalkBack をトリガーしたい場合に使用することです - Android ドキュメントを参照してください。

ただし、以前の Android API をサポートしたい場合は、View.requestFocus()ここで概説した を使用した、より複雑な回答があります: Android: How to force Explore-By-Touch/Talkback to repeat the ContentDescription of the current View in AccessibilityFocus?

また、無駄な労力を省くために、Google の Eyes-Free コードに対して私が提起したいくつかのバグを確認することをお勧めします。

于 2014-08-13T15:00:44.777 に答える