辅助功能和Android WebView

时间:2012-05-17 11:31:24

标签: android webview accessibility android-a11y

是否为Android WebView启用了辅助功能?任何人都可以告诉如何使WebView可访问?

5 个答案:

答案 0 :(得分:9)

通过在Honeycomb及以上版本中的javascript注入启用Android webview可访问性(如pointed out by alanv)。 用户必须通过以下方式启用它:

  • 启用辅助功能模式,包括4.0 +中的“按触摸浏览”。
  • 启用“增强的Web辅助功能”,或者在旧设备上启用“注入Web脚本”。

这可以通过<script>标记将javascript注入每个加载的页面来实现。请注意,您必须要小心,因为并非所有内容都能与此javascript一起使用,并且在某些边缘情况下注入将失败。

答案 1 :(得分:6)

您可以扩展WebView类以实现Accessibility API方法。

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

答案 2 :(得分:4)

我也在4.0设备上遇到过这个问题。我最终在WebView上放置了一个TextView,使TextView背景和文本透明。将TextView的文本内容设置为WebView的内容,并删除所有HTML标记。

我知道,这是一个最不优雅的解决方案,但嘿,它的确有效......

答案 3 :(得分:2)

不,内置的TalkBack服务无法访问WebView,至少从Android 4.0版开始。相反,盲人用户instructed to use类似Mobile Accessibility for 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设备保留say WebView或根本不保留任何内容。

答案 4 :(得分:1)

我知道如何通过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视图内容。

抱歉,我的英语很差。