是否为 Android WebView 启用了辅助功能?谁能说出如何使 Web 视图可访问?
Android webview 可访问性是通过 Honeycomb 及更高版本中的 JavaScript 注入启用的(正如 alanv 所指出的(。用户必须通过以下方式启用它:
- 打开辅助功能模式,包括 4.0+ 中的"触摸浏览"。
- 启用"增强的 Web 可访问性",或者在较旧的设备上启用"注入 Web 脚本"。
这是通过<script>
标签将javascript注入每个加载的页面来工作的。请注意,您必须小心,因为并非所有内容都可以使用此 javascript,并且在某些边缘情况下注入会失败。
您可以扩展 WebView 类以实现辅助功能 API 方法。
http://developer.android.com/guide/topics/ui/accessibility/apps.html#custom-views
我在 4.0 设备上也遇到了这个问题。我最终在WebView上放置了一个TextView,使TextView背景和文本透明。文本视图的文本内容设置为去除所有 HTML 标记的 Web 视图内容。
我知道这是一个最不优雅的解决方案,但嘿,它有效......
不,至少从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);
}
或者,您可以设置 Web 视图的内容说明。请注意,这似乎仅适用于 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(( 可以获取 Web 视图内容。
对不起,我的英语很差。