0

メニュー項目にアクセシビリティ デリゲートを設定する方法はありますか? 私のアプリはテキスト読み上げを使用しており、TalkBack がメニュー項目のコンテンツの説明を読み上げる前に、いくつかのカスタム コードを実行したいと考えています (メニュー項目がアクセシビリティ フォーカスを取得したときに発生します)。そうしないと、アプリからのテキスト読み上げが TalkBack のテキスト読み上げと競合します。

更新: 私のアプリは、WebView から文をフェッチし、強調表示して、TTS エンジンを使用して読み取ります。文が読み上げられると、 onDone() コールバックは同じメソッドを開始しますが、次の文に対してです。

TalkBack と私のアプリは同じ TTS エンジンを使用しているため、一度に発声できるのは 1 つのみです。したがって、私のアプリは WebView の文を文ごとに読み上げていますが、ユーザーがメニュー項目に注目すると、TalkBack がその説明を読み上げます。私の発話が中断されたので、onDone() が呼び出されます (onDone() は、発話が完全に発話されたのか、単に中断されたのかを区別できません)。言葉。メニュー項目のアクセシビリティ イベントが発生する前に、どういうわけか isPaused ブール値を true に設定したいと思います。

private class ttsUtteranceListener extends UtteranceProgressListener {

    @Override
    public void onStart(String utteranceId) {
    }

    @Override
    public void onDone(final String utteranceId) {
        if (!isPaused) {   
            ...
            speakNextSentence();
            ...
        }
    }

    @Override
    public void onError(String utteranceId) {
    }
4

1 に答える 1

1

慎重に取り扱わない限り、WCag 2.0、ガイドライン 2.2.2 では、アプリが行うことはアクセスできないと見なされる可能性があります。

解決策 1: このガイドラインの下で、このシナリオを処理する適切な方法は、コンテンツを手動で開始/停止/一時停止する機能をユーザーに提供することです。これはかなり簡単に実装できるはずです。これだけで十分であり、3 つのソリューションすべてに必要です。

解決策 2: これを行う別の方法は、アクセシビリティ エンジンがアクティブであることを検出したときに、独自の音声合成を行わないことです。を使用して、webview を liveRegion としてマークアップしますACCESSIBILITY_LIVE_REGION_POLITE。次に、現在強調表示されている文のテキストが含まれている必要がある、更新中の contentDescriptions をトークバックで取得します。これにより、TalkBack は何をいつ発表するかを判断する仕事を残されます。これには、地域がアクティブで多くのフィードバックを提供している場合でも、TalkBack ユーザーに対して予測可能な方法で動作するという追加の利点があります。そのため、WCag 2.2.2 に違反する可能性は低くなりますが、それでも注意が必要です! そしておそらく、コンテンツを一時停止する機能を提供する必要があります。

解決策 3: Android MenuItem には、アクセシビリティ API コールバックがすべて実装されているわけではありません。たとえば、MenuItems が代わりにボタンである場合、解決策はオーバーライドonRequestSendAccessibilityEventして TYPE_VIEW_ACCESSIBILITY_FOCUSED を探すことです。ただし、MenuItems はこの API を実装していません。したがって、これらの API を実装する要素を使用して、独自のメニューをコーディングし、思いどおりに実行できます。ただし、前に述べたように、このアプローチはお勧めしません。このアプローチは、ほとんどの場合、WCag 2.0 アクセシビリティ ガイドラインに違反しています。

于 2015-02-18T18:31:10.357 に答える