5

イントラネット Web アプリケーションを WCAG 2.0 に準拠するように調整しています。このアプリは複雑なコントロールのリストを備えていますが、リストの labelDisplay またはリストの labelFunction によって返されるもの以外は、スクリーン リードを読み取って読み取ることができません。

以下は要約された例です。「labelOne」はスクリーン リーダーと listBox によって読み取られ、リスト内の各項目の 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>

"アクセスラベル"; ラベルが読み上げられ、タブ順になっていることを確認します。

package accessibility {
import mx.managers.IFocusManagerComponent;

import spark.components.Label;

public class Label extends spark.components.Label implements IFocusManagerComponent {
}
}

リスト内の各項目、つまり「labelDisplay」、「labelTwo」、「button」をタブで移動することもできますが、スクリーン リーダーはそれらを読み上げません。

各ラベルとボタンを読み上げることができますか?

4

1 に答える 1

1

いくつかの提案がありますが、それらが機能するかどうかはわかりません (私のスクリーン リーダーはクリーナーにあります)。

まず、クラスでスクリーン リーダーがどのように機能するかについて、クラスから興味深い読み物を見つけられるかもしれません。特に、子オブジェクト (レンダラー) に関するセクションの次の文に注意してください。ListAccImplList

... リスト項目のアクセシビリティは List によって管理されます。アイテム レンダラーの accessibilityImplementation と accessibilityProperties は、Flash Player によって無視されます。

labelDisplayこれは、スクリーン リーダーが の値または の戻り値のみを読み上げる理由を説明していますlabelFunction。レンダラーでオブジェクトに焦点を合わせてもList、スクリーン リーダーに関してはまだ制御されているように見えます。これは、 AccImplクラスのドキュメントでさらに確認されています(これも子セクションから):

Flash Player は、アクセス可能なオブジェクトの真の階層をサポートしていません。DisplayObject に accessibilityImplementation オブジェクトがある場合、その子の accessibilityImplementation オブジェクトは無視されます。

提案

  • focusEnabledのプロパティを にList設定してみてくださいfalse。UI をタブで移動すると、レンダラー内のオブジェクトは引き続きフォーカスされますが、Listそれ自体はフォーカスされません。のドキュメントAccImplが暗示しているように見えるためList、スクリーン リーダーとの対話は管理されず、レンダラーのフォーカス可能なオブジェクトに延期されます。

  • クラスを拡張してみて、そのメソッドListをオーバーライドしてください。initializeAccessibility()このメソッド (私が推測) は、Flex コンポーネントのライフサイクルによって呼び出され、リストがスクリーン リーダーとやり取りできるようになります。アクセシビリティの実装を初期化しない場合、その責任はレンダラーのオブジェクトに委ねられると思います。または、クラッシュして燃焼する可能性があります。

それが私が得たすべてです、それが役に立てば幸いです...良い質問です。見つけたものを共有してください。

于 2013-07-02T02:20:57.490 に答える