web-dev-qa-db-ja.com

アクセシビリティとAndroid WebView

Android WebViewのアクセシビリティが有効になっていますか?WebViewをアクセシブルにする方法を誰かに教えてもらえますか?

22
Nemo

Android Webビューのアクセシビリティは、Honeycomb以降でJavaScriptインジェクションを介して有効になります( alanvによって指摘 )。user次の方法で有効にする必要があります:

  • 4.0以降の「タッチで探索」を含むユーザー補助モードをオンにする。
  • 「拡張Webアクセシビリティ」を有効にするか、古いデバイスでは「Webスクリプトを挿入」を有効にします。

これは、<script>タグを介してロードされた各ページにJavaScriptを挿入することで機能します。すべてのコンテンツがこのJavaScriptでうまく再生されるわけではなく、一部のEdgeケースではインジェクションが失敗するため、注意する必要があることに注意してください。

9
krakatoa

WebViewクラスを拡張して、AccessibilityAPIメソッドを実装できます。

http://developer.Android.com/guide/topics/ui/accessibility/apps.html#custom-views

6
keaton_fu

4.0デバイスでもこの問題が発生しました。結局、TextViewをWebViewの上に配置して、TextViewの背景とテキストを透明にしました。 TextViewのテキストコンテンツは、すべてのHTMLタグが削除されたWebViewのコンテンツに設定されています。

最もエレガントでない解決策はわかっていますが、うまくいきます。

4
electricSunny

いいえ、少なくともAndroidバージョン4.0の時点では、組み込みのTalkBackサービスからWebViewにアクセスできません。代わりに、目の不自由なユーザーは 使用するように指示されていますAndroid向けモバイルアクセシビリティ のようなもので、音声によるブラウジングインターフェイスを提供します。コンテンツを他のプロセスで利用できるようにして、目の不自由なユーザーが選択したブラウザでコンテンツを表示できるようにすることをお勧めします。コンテンツを表示する意図を開始することによって:

public static void loadUrlInBrowser(Context c, Uri uri) {
    Intent i = new Intent(Intent.ACTION_VIEW);
    i.setDataAndType(uri, "text/html");
    c.startActivity(i);
}

または、WebViewのコンテンツの説明を設定することもできます。これは、4.0より前のバージョンのAndroidでのみ機能するように見えることに注意してください。 4.0デバイスは たとえばWebView か、まったく何も保持しないことがわかりました。

2
krakatoa

Accessibility APIを使用してWebビューのコンテンツにアクセスする方法を知っています。AccessibilityNodeInfo.getText()がnullまたは「null」の場合は、AccessibilityNodeInfo.getContentDescription()を呼び出します。

単純なコード:

private String getTextOrDescription(AccessibilityNodeInfo info) {
    String text = String.valueOf(info.getText());

    if (isEmptyOrNullString(text)) {
        text = String.valueOf(info.getContentDescription());
    }
    return text;
}

private boolean isEmptyOrNullString(String text) {
    if (TextUtils.isEmpty(text) || text.equalsIgnoreCase("null")) {
        return true;
    }
    return false;
}

getContentDescription()は、Webビューのコンテンツを取得できます。

英語が下手でごめんなさい。

1
koko