是否为 Android WebView 启用了辅助功能?谁能告诉如何使 WebView 可访问?
5 回答
Android webview 可访问性是通过 Honeycomb 及更高版本中的 javascript 注入启用的(正如alanv 所指出的那样)。用户必须通过以下方式启用它:
- 打开辅助功能模式,包括 4.0+ 中的“通过触摸探索”。
- 启用“增强的 Web 可访问性”,或者在旧设备上启用“注入 Web 脚本”。
这是通过通过<script>
标签将 javascript 注入每个加载的页面来实现的。请注意,您必须小心,因为并非所有内容都能很好地使用此 javascript,并且在某些边缘情况下注入会失败。
您可以扩展 WebView 类以实现 Accessibility API 方法。
http://developer.android.com/guide/topics/ui/accessibility/apps.html#custom-views
我也在 4.0 设备上遇到了这个问题。我最终在 WebView 上放置了一个 TextView,使 TextView 背景和文本透明。TextView 的文本内容被设置为 WebView 的内容,所有 HTML 标记都被删除。
我知道,这是一个最不优雅的解决方案,但是嘿,它有效....
不,WebView
至少从 Android 4.0 版开始,无法从内置 TalkBack 服务访问。相反,盲人用户被指示使用类似Android 的 Mobile Accessibility 的东西,它提供了一个语音浏览界面。我建议将您的内容提供给其他进程,允许盲人用户在他们选择的浏览器中查看内容。我通过开始查看内容的意图来做到这一点:
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,要么什么都不说。
我知道如何通过 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() 可以获取网页视图内容。
对不起我糟糕的英语。