10

ユーザーが 4 桁の PIN を入力するように求められるロック解除画面があります。ユーザーがピンを間違って入力すると、以前TextViewは表示されていなかった がエラー メッセージとともに表示されます。この時点で、TalkBack がエラー メッセージの内容を読み上げると便利です。

いくつかの実験を通じてandroid:focusableInTouchMode="true"、ビューを設定し、プログラムで を呼び出すことができることに気付きましたView#requestFocus()。これは初めて機能しますが、ビューに既にフォーカスがあるため、後続のエラーで失敗します。また、現在のビュー フォーカスをオーバーライドすることは一般的に悪い考えのようです。

View#announceForAccessibility(java.lang.CharSequence)次に、エラーメッセージが表示されたときに呼び出してみました。ビューが現在表示されていない場合、このメソッドは暗黙のうちに失敗するようです。問題ありません。それ以外は完全に機能します。ただし、API レベル 16+ (Jelly Bean) でのみ利用可能であり、その有用性が実際に制限されています。TalkBack は API レベル 7 以降をサポートしているため、より良い解決策が必要です。

アクセシビリティに関する 2011 年と 2012 年の Google I/O セッションの両方を見てきましたが、どちらもこの基本的な使用例を扱っていないようです。これを行う最善の方法は何ですか?

編集 1: TLDR; Jelly Bean で導入する前に、TalkBack にテキストを読み上げさせる方法はありますか?View#announceForAccessibility(java.lang.CharSequence)

4

5 に答える 5

11

を使用View.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_FOCUSED)してTextView、同じ方法で TalkBack をトリガーできるView.requestFocus()はずです。イベントをトリガーするだけで、実際にはビューにフォーカスしていないため、最初の後にクラッシュすることはありません。

于 2012-11-09T06:20:35.477 に答える
9

私は受け入れられた答えを使用していましたが、これはうまく機能します。ただし、アクセシビリティ フォーカスがテキスト ビューに設定されたときの誤解を招くような音は好きではありませんでした。これは、ダブルタップによって EditField に入力フォーカスが与えられたときと同じ音 (一種の引き出しを開く音) です。実際には、inputfocus (カーソルなど) を使用して EditText から移動していませんでした。

だから私は試しました:

m_textView.sendAccessibilityEvent(AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED);`

興味深いことに、それは機能します。フォーカスを移動したり、他の音を出したりせずに、ラベルが読み取られます。

于 2013-05-14T18:48:40.253 に答える
2

OK、L以降を使用している場合、より良い答えは次を使用することです: http://developer.android.com/reference/android/view/View.html#setAccessibilityLiveRegion(int)

これですべての作業が完了します。

于 2014-10-29T21:09:26.327 に答える
2

もう 1 つの方法は、TalkBack が有効になっているときに、エラー テキストを含むトースト メッセージを追加で表示することです。これも朗読です。

于 2015-05-07T12:21:43.457 に答える
0

推奨される方法は、テキストビューの変更後に以下のコードを使用することです。

textview.sendAccessibilityEvent(AccessibilityEvent.TYPE_ANNOUNCEMENT);

集中せずに内容を読んでくれます。

于 2016-12-29T10:06:17.700 に答える