【发布时间】:2012-05-17 11:31:23
【问题描述】:
是否为 Android WebView 启用了辅助功能?谁能告诉如何使 WebView 可访问?
【问题讨论】:
标签: android webview accessibility android-a11y
是否为 Android WebView 启用了辅助功能?谁能告诉如何使 WebView 可访问?
【问题讨论】:
标签: android webview accessibility android-a11y
Android webview 可访问性通过 Honeycomb 及更高版本中的 javascript 注入启用(如 pointed out by alanv)。 用户必须通过以下方式启用它:
这是通过<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 标记都被去掉了。
我知道,这是一个最不优雅的解决方案,但它确实有效....
【讨论】:
不,至少从 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,要么什么都没有。
【讨论】:
我知道如何通过 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() 可以获取网页视图内容。
对不起我的英语不好。
【讨论】: