[辅助功能]图像上缺少contentDescription属性
这个错误意味着什么,我该如何解决?
<ImageButton
android:id="@+id/callbannerbuttonpg1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginTop="157dp"
android:background="@null"
android:src="@drawable/callbanner"
android:visibility="invisible" />
Run Code Online (Sandbox Code Playgroud) 每当显示通知时,我都会尝试检测我的应用.我已经在设置应用程序中启用它并且onServiceConnected会被调用,但是当我通过gmail应用程序创建通知或接收电子邮件时,onAccessibilityEvent没有任何事情发生,也不会被调用.
Android清单:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.test.slide"
android:versionCode="1"
android:versionName="1.0">
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="15"/>
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
<uses-permission android:name="android.permission.GET_TASKS"/>
<application android:label="Slide"
android:icon="@drawable/ic_launcher"
android:theme="@style/AppTheme">
<activity
android:name=".Settings"
android:label="Slide">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
<activity
android:name=".Tools"
android:label="Slide"
android:theme="@android:style/Theme.Translucent.NoTitleBar">
</activity>
<service android:name=".LocalService"/>
<service android:name=".NotificationService"
android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE"
android:label="Slide"
android:enabled="true"
android:exported="false">
<intent-filter>
<action android:name="android.accessibilityservice.AccessibilityService"/>
</intent-filter>
</service>
</application>
Run Code Online (Sandbox Code Playgroud)
NotificationService.java
package com.test.slide;
import android.accessibilityservice.AccessibilityService;
import android.accessibilityservice.AccessibilityServiceInfo;
import android.view.accessibility.AccessibilityEvent;
public class NotificationService extends AccessibilityService {
@Override
public void onAccessibilityEvent(AccessibilityEvent event) {
System.out.println("onAccessibilityEvent");
if (event.getEventType() == AccessibilityEvent.TYPE_NOTIFICATION_STATE_CHANGED) {
System.out.println("notification: " …Run Code Online (Sandbox Code Playgroud) 随着越来越多人使用Backbone,Ember和其他JS MVC类型框架,越来越多的HTML DOM正在动态构建,第一个HTML页面只包含一个"root"元素,用于将生成的HTML转储到其中.
这种做法是508投诉吗?
是否可以使用键盘导航到下拉菜单Tab,并使用箭头键导航到下拉菜单的子元素?
这是我现在的代码:
<input type="text" value="click tab to jump to the drop down."/>
<div class="bs-docs-example">
<div class="dropdown clearfix">
<ul class="dropdown-menu" role="menu" aria-labelledby="dropdownMenu" style="display: block; position: static; margin-bottom: 5px; *width: 180px;">
<li><a tabindex="-1" href="#">Menu Item A</a></li>
<li><a tabindex="-1" href="#">Menu Item B</a></li>
<li><a tabindex="-1" href="#">Menu Item C</a></li>
<li class="divider"></li>
<li><a tabindex="-1" href="#">Menu Item A1</a></li>
<li class="dropdown-submenu">
<a tabindex="-1" href="#">Menu Item B1</a>
<ul class="dropdown-menu">
<li><a tabindex="-1" href="#">You should navigate here with the keyboard.</a></li>
<li><a tabindex="-1" href="#">Thanks For your Help!</a></li>
</ul>
</li>
</ul> …Run Code Online (Sandbox Code Playgroud) 想象一下,你有一个简单的单页应用程序 - 无论它是使用Backbone,Angular,Ember还是其他任何东西编写的.
如果跟踪路线,你如何告诉屏幕阅读器我们改变了'页'?
在一个典型的应用程序,当我从导航/index.html到/about.html屏幕阅读器显然检测的页面变化,并重新读取,你所期望的.
然而,在我的Backbone应用程序中,当我遵循路线时,我无法确定如何触发"重新读取".我试过触发一个focus我在某个地方看过的事件,但这似乎不起作用.
注意:我目前正在使用NVDA/Chrome进行测试.
javascript accessibility backbone.js angularjs single-page-application
我有UITableView基本样式单元格的静态,默认44高度.每个单元格中都有一个带有Body文本样式的标签.这样我就可以免费获得动态类型行为.
它的工作原理除外:
我设法通过跟随黑客来解决这个问题
- (void)viewDidLoad
{
[super viewDidLoad];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(preferredContentSizeChanged)
name:UIContentSizeCategoryDidChangeNotification object:nil];
}
- (void)preferredContentSizeChanged
{
// adjust the layout of the cells
// for some reason text from labels are disappear
self.statusBarCell.textLabel.text = @"Status bar";
self.itemColorCell.textLabel.text = @"Color";
Run Code Online (Sandbox Code Playgroud)
但我有另一个完全相同UITableView,这是行不通的.我试过细胞和标签的出口.我试过reloadData和setNeedsLayout方法.
这是照片.标签为黄色,内容视图为蓝色:

在我们的Web应用程序中,我们有一个搜索表单,其中包含一个字段,用户可以从可能选项列表中选择一个或多个答案.我们目前使用"select"html元素,其中"multiple"属性设置如下例所示:
select {
width: 150px;
}Run Code Online (Sandbox Code Playgroud)
<select multiple>
<option value="A">Alice</option>
<option value="B">Bob</option>
<option value="F">Fred</option>
<option value="K">Kevin</option>
<option value="M">Mary</option>
<option value="S">Susan</option>
</select>Run Code Online (Sandbox Code Playgroud)
用户测试的反馈表明,这种解决方案让用户感到困惑.通过按住Ctrl键(在窗口上)执行多个选择/取消选择,但是许多用户不知道这一点.
当仅使用键盘时,该元素似乎也不容易使用 - 这显然是一个可访问性问题.
是否有一种"最佳实践",可以通过多种方式向用户显示输入?
Voice over会NSStrings像这样读取以下内容
14:15"十四点十五分."
这显然是一个时间
14:00"十四."
这是模棱两可的.
如果时间14:00显示在状态栏中,则会将其正确读取为
"一万四小时"
我如何以本地化的方式实现这一目标?
有什么方法可以在不破坏屏幕阅读器解释表格其余部分的情况下以可访问的方式隐藏表格标题吗?隐藏<caption>与通常推荐样式隐藏元素在视觉上打破了VoiceOver的行为,使其通过读取线性使用“下一个”按键时跳过最后一行在表中。(可以通过显式向下导航列来强制 VoiceOver 进入最后一行,但这需要用户知道这样做。)
我认识到这可能是 VoiceOver 本身的一个错误,但如果有一个干净的解决方法,那将是理想的,因为 WCAG 需要实际可用的辅助技术的可访问性。
这是一个极简示例来演示:
更新:下面的样式规则是 Magento 框架中使用的标准规则,用于在视觉上隐藏元素,同时让屏幕阅读器可以访问它们。导致 VoiceOver 行为的关键规则是position: absolute; 但是,如果简单地将其删除,则布局流程会受到影响。
caption {
border: 0;
clip: rect(0, 0, 0, 0);
height: 1px;
margin: -1px;
overflow: hidden;
padding: 0;
position: absolute;
width: 1px;
}Run Code Online (Sandbox Code Playgroud)
<table>
<caption>Table of Fruits</caption>
<thead>
<tr>
<th>Fruit</th>
<th>Color</th>
</tr>
</thead>
<tbody>
<tr>
<td>Apple</td>
<td>Red</td>
</tr>
<tr>
<td>Pear</td>
<td>Green</td>
</tr>
</tbody>
</table>
<p>Voiceover will jump straight from "Red" in prior table to this paragraph, skipping the last row.</p>Run Code Online (Sandbox Code Playgroud)
accessibility ×10
html ×3
android ×2
backbone.js ×2
ios ×2
javascript ×2
voiceover ×2
angularjs ×1
css ×1
ember.js ×1
html5 ×1
imagebutton ×1
objective-c ×1
section508 ×1
uitableview ×1
xcode ×1
xhtml ×1