Adz*_*Adz 5 apache-flex accessibility
我们正在调整我们的Intranet Web应用程序以符合WCAG 2.0标准.该应用程序具有复杂控件的列表,但我无法读取屏幕读取列表中的任何内容,但labelDisplay或whats由列表的labelFunction返回.
下面是一个简单的例子,屏幕阅读器和listBox读取"labelOne",列表中每个项目的labelFunction结果.
<?xml version="1.0"?>
<s:Application
xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx"
xmlns:access="accessibility.*">
<fx:Script><![CDATA[
private function listLabelFunction(item : Object) : String {
return item.one;
}
]]></fx:Script>
<s:VGroup>
<access:Label id="labelOne" text="This text will be read out!"/>
<s:List hasFocusableChildren="true" labelFunction="listLabelFunction">
<s:itemRenderer>
<fx:Component>
<s:ItemRenderer>
<fx:Script><![CDATA[
import mx.controls.Alert;
]]></fx:Script>
<s:HGroup id="hGroup">
<access:Label id="labelDisplay" text="{data.one}"/>
<access:Label id="labelTwo" text="{data.two}"/>
<s:Button id="button" label="{data.button}" click="Alert.show('Ok!')"/>
</s:HGroup>
</s:ItemRenderer>
</fx:Component>
</s:itemRenderer>
<s:dataProvider>
<mx:ArrayCollection>
<fx:Object one="one" two="two" button="ok"/>
<fx:Object one="une" two="deux" button="ok"/>
<fx:Object one="uno" two="due" button="ok"/>
<fx:Object one="um" two="dois" button="ok"/>
</mx:ArrayCollection>
</s:dataProvider>
</s:List>
</s:VGroup>
</s:Application>
Run Code Online (Sandbox Code Playgroud)
"访问标签"; 确保标签被读出并按标签顺序排列.
package accessibility {
import mx.managers.IFocusManagerComponent;
import spark.components.Label;
public class Label extends spark.components.Label implements IFocusManagerComponent {
}
}
Run Code Online (Sandbox Code Playgroud)
我也可以选中列表中的每个项目,即"labelDisplay","labelTwo"和"button",但屏幕阅读器不会读出它们.
是否可以读出每个标签和按钮?
我有一些建议,但我不知道它们是否有效(我的屏幕阅读器在清洁工那里)。
首先,您可能会在课堂上找到一些有趣的读物ListAccImpl,了解该List课程如何与屏幕阅读器配合使用。特别要注意有关子对象(渲染器)部分中的这句话:
...列表项的可访问性由 List 管理;Flash Player 会忽略项目渲染器的accessibilityImplementation 和accessibilityProperties。
这解释了为什么屏幕阅读器只读出 的值labelDisplay或返回labelFunction。即使您已将对象聚焦在渲染器中,但List屏幕阅读器似乎仍能控制该对象。这在AccImpl类的文档中得到了进一步证实(也来自子部分):
Flash Player 不支持可访问对象的真正层次结构。如果 DisplayObject 具有accessibilityImplementation 对象,则其子级的accessibilityImplementation 对象将被忽略。
建议
尝试focusEnabled将 的属性设置List为false。当您通过 UI 进行 Tab 切换时,渲染器中的对象仍将获得焦点,但其List本身不会。正如文档AccImpl似乎暗示的那样,List因此不会管理与屏幕阅读器的交互,并且它将推迟到渲染器中的可聚焦对象。
尝试扩展该类List,并重写它的initializeAccessibility()方法。此方法(我假设)由 Flex 组件生命周期调用,并且是列表获得与屏幕阅读器交互的能力的地方。如果您不初始化辅助功能实现,我的想法是它将将该责任推迟到渲染器中的对象。否则它可能会崩溃并烧毁。
这就是我所得到的,希望它有所帮助......好问题,请分享您的发现。
| 归档时间: |
|
| 查看次数: |
276 次 |
| 最近记录: |