Accessibility and Android WebView

2019-03-14 11:52发布

Is Accessibility enabled for Android WebView? Can anyone tell how to make a WebView accessible?

5条回答
戒情不戒烟
2楼-- · 2019-03-14 12:10

You can extend the WebView class to implement Accessibility API methods.

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

查看更多
放我归山
3楼-- · 2019-03-14 12:17

I also ran into this issue on 4.0 devices. I ended up placing a TextView on top of the WebView, making the TextView background and text transparent. The text content of the TextView being set to the content of WebView with all HTML tags stripped out.

A most inelegant solution, I know, but hey it works....

查看更多
冷血范
4楼-- · 2019-03-14 12:30

The Android webview accessibility is enabled via javascript injection in Honeycomb and above (as pointed out by alanv). The user must enable it by:

  • Turning on Accessibility mode, including 'Explore by Touch' in 4.0+.
  • Enabling 'Enhanced Web Accessibility', or, on older devices, 'Inject Web Scripts'.

This works by injecting javascript into each loaded pages via <script> tags. Note that you will have to be careful, as not all content will play nice with this javascript, and the injection will fail in some edge cases.

查看更多
我只想做你的唯一
5楼-- · 2019-03-14 12:31

I know how to access web view content by Accessibility API, when AccessibilityNodeInfo.getText() is null or "null", call AccessibilityNodeInfo.getContentDescription().

simple code:

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() can get the web view content.

sorry for my poor english.

查看更多
聊天终结者
6楼-- · 2019-03-14 12:32

No, the WebView is not accessible from the built-in TalkBack service, at least as of Android version 4.0. Instead, blind users are instructed to use something like Mobile Accessibility for Android, which provides a spoken browsing interface. I would suggest making your content available to other processes, allowing blind users to view the content in their browser of choice. I did this by starting an intent to view the content:

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

Alternatively, you can set the content description of the WebView. Note that this only seems to work in pre 4.0 versions of android. I've found that 4.0 devices keep either say WebView or nothing at all.

查看更多
登录 后发表回答