私の 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
またはメソッドを通過しないことがわかります。それにもかかわらず、コードに設定されたカスタム コントロールのと、削除しようとしている余分な単語が生成されています。dispatchPopulateAccessibilityEvent
event.setContentDescription(null)
AccessibilityEvent
ContentDescription
Activity.onCreate
AccessibilityDelegate
また、カスタム コントロールの親に を設定してViewGroup
、そのonRequestSendAccessibilityEvent
呼び出しを表示できるようにしました。ContentDescription
これにより、 my を含むイベントが通過していないことが確認されます。
これは非常に不可解であり、API 16 を使用するエミュレーターと実際のハードウェアの両方で発生します。何かアイデアはありますか?