3

私の Android アプリには に基づくカスタム スライダー コントロールが含まれておりSeekBar、カスタム テキスト フレーズをコントロールに添付して、アクセシビリティのための使用法を説明したいと考えています。

を使用してこれを正常に実行しView.setContentDescription(text)、 からスライダー コントロールにフォーカスを要求すると、TalkBack はフレーズを正しく読み上げますActivity.onCreate

ここまでは順調ですね。ただし、Android API 16 テスト デバイスで AccessibilityFocus を設定すると思われるコントロールに触れると、余分な単語が音声フレーズに追加されます。つまり、'...seek control. 0パーセント」。これらの追加の単語を削除したいと思います。

event.getText().clear()inを使用してそれらを排除しようとしましたが、View.onInitializeAccessibilityEvent(event)成功しませんでした。イベントを LogCat にエコーすると、 に正しい語句が報告されevent.contentDescription、 にはエントリがありませんが、デバイス ハードウェアからのオーディオ出力と、メニュー -> 設定 -> アクセシビリティ -> TalkBackevent.textによって表示される画面上のデバッグ テキストの両方に余分な単語が表示されます。>設定->開発者設定->音声出力の表示

余分な単語が追加されている場所と、それらを削除する方法を誰か提案できますか?

建設的な提案を歓迎します。ありがとう。

アップデート

カスタム コントロールの一部の Explore By Touch (最初のシングルタップ) イベントが、意図的に を呼び出しているため、そのonInitializeAccessibilityEventまたはメソッドを通過しないことがわかります。それにもかかわらず、コードに設定されたカスタム コントロールのと、削除しようとしている余分な単語が生成されています。dispatchPopulateAccessibilityEventevent.setContentDescription(null)AccessibilityEventContentDescriptionActivity.onCreate

AccessibilityDelegateまた、カスタム コントロールの親に を設定してViewGroup、そのonRequestSendAccessibilityEvent呼び出しを表示できるようにしました。ContentDescriptionこれにより、 my を含むイベントが通過していないことが確認されます。

これは非常に不可解であり、API 16 を使用するエミュレーターと実際のハードウェアの両方で発生します。何かアイデアはありますか?

4

2 に答える 2

1

また、 http://developer.android.com/reference/android/view/View.html#onInitializeAccessibilityNodeInfo(android.view.accessibility.AccessibilityNodeInfo)をオーバーライドする必要があります。

そこに contentDescription を設定します。

0% を削除したい場合は、AccessibilityNodeInfo/AccessibilityEvent のクラスを変更してみます: http://developer.android.com/reference/android/view/accessibility/AccessibilityNodeInfo.html#setClassName(java.lang.CharSequence )

于 2014-10-29T21:07:24.463 に答える