【问题标题】:Accessibility and Android WebView辅助功能和 Android WebView
【发布时间】:2012-05-17 11:31:23
【问题描述】:

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

【问题讨论】:

    标签: android webview accessibility android-a11y


    【解决方案1】:

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

    • 开启辅助功能模式,包括 4.0+ 中的“触摸探索”。
    • 启用“增强的 Web 可访问性”,或者在旧设备上启用“注入 Web 脚本”。

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          【解决方案4】:

          不,至少从 Android 4.0 版开始,无法通过内置 TalkBack 服务访问 WebView。相反,盲人用户是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,要么什么都没有。

          【讨论】:

          • WebView 可以在 Honeycomb 及更高版本中通过启用 Settings > Accessibility > Inject web scripts 进行键盘访问。在 Jelly Bean 及更高版本中,通过启用 Settings > Accessibility > Enhance web 可访问性,WebView 可通过键盘访问(启用 JS 时可触摸探索)。
          • @alanv 在较新的 Android API 上两条路径是否相同?我在 Android 11 上找不到它们!
          【解决方案5】:

          我知道如何通过 Accessibility API 访问网页视图内容,当 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() 可以获取网页视图内容。

          对不起我的英语不好。

          【讨论】:

            猜你喜欢
            • 2022-11-10
            • 1970-01-01
            • 1970-01-01
            • 2022-11-30
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多