0

我遇到了一个问题,我无法在我的 Flex 应用程序中为文本设置自定义阅读顺序。我tabIndex在每个文本元素上设置属性,我理解这是设置屏幕阅读器阅读顺序的正确方法。

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
            xmlns:mx="library://ns.adobe.com/flex/mx" layout="absolute">

  <mx:Label x="10" y="10" text="1" tabIndex="2" />
  <mx:Label x="10" y="36" text="2" tabIndex="1" />
  <mx:Label x="10" y="62" text="3" tabIndex="3" />

</mx:Application>

对于这个小型测试应用程序,屏幕阅读器 (JAWS 12) 读取“1 2 3”而不是“2 1 3”。

一些测试似乎表明这只是我的特定配置的问题。我正在使用 Flex SDK 4.1 编译应用程序,但仅使用 MX 组件集和 Halo 主题。我们有一个相当复杂的应用程序,它在 Flex 4 出现之前就开始了,所以虽然我们已经开始使用最新的 SDK 进行编译,但我们还没有升级任何东西来使用 Spark 组件集。

当我使用 4.1 SDK 和 Spark 组件+主题制作类似的测试应用程序时,阅读顺序设置正确。如果我制作一个测试应用程序并使用 3.5 SDK 进行编译,结果相同——一切正常。

我知道我可以改用 Spark 组件,但如果可以的话,我会尽量避免这种情况,因为这意味着我正在处理的当前项目的时间线必须改变。

有没有人遇到过任何类似的问题,或者有任何建议可以使它起作用?

4

2 回答 2

0

您需要使用文本而不是标签。文档:

当标签控件与其他控件相关联或窗体模式处于非活动状态时,屏幕阅读器会读取它。Label 控件在窗体模式下或通过键盘无法获得焦点。

...

文本控件是不可聚焦的,只有在窗体模式处于非活动状态时才由屏幕阅读器读取。

我还发现这可能是一个更好的解决方案。该示例在 Flex 4 中,但您可以对 Flex 3 中的 Label 执行相同操作,只需实现 IFocusManagerComponent 接口。

于 2011-04-13T22:01:41.123 回答
0

我目前在 Flex 3 中使用 JAWS 11,所以还没有遇到这个问题。但是,我已经阅读了一种将组件副本放在后台的选项,这对于我们的需求来说太复杂了,并且让屏幕阅读器按顺序阅读这些组件:

http://www.adobe.com/accessibility/products/flash/reading.html#off_stage

另外,我看到的一个技巧是以 10 为增量设置 TabIndex。JAW 只关心它们的顺序,如果您需要添加额外的组件,则不需要重新编号。即 10, 20, 30 如果你需要,你可以添加 11,而不是重新编号。

布赖恩

于 2011-04-14T14:24:15.270 回答