2013-07-02 11 views
5

Stiamo adattando la nostra applicazione web intranet affinché sia ​​compatibile con WCAG 2.0. L'app presenta un elenco di controlli complessi, ma non riesco a leggere una schermata per leggere qualcosa nell'elenco, ma labelDisplay o cosa è restituito dalla funzione label dell'elenco.Come ottenere uno screen reader per leggere un articolo Componenti del componente di registrazione

di seguito è un esempio ridotto, "labelOne" viene letto dallo screen reader e dal listBox e il risultato della labelFunction per ogni elemento nell'elenco.

<?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> 

"etichetta di accesso"; assicura che l'etichetta sia letta e sia nell'ordine di tabulazione.

package accessibility { 
import mx.managers.IFocusManagerComponent; 

import spark.components.Label; 

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

sono in grado di scheda anche ogni elemento della lista, vale a dire "labelDisplay", "labelTwo" e "pulsante", ma il lettore di schermo non li leggono fuori.

È possibile leggere ogni etichetta e pulsante?

risposta

1

Ho un paio di suggerimenti, ma non so se funzioneranno o meno (il mio screen reader è agli addetti alle pulizie).

In primo luogo, è possibile trovare alcuni interesting reading here dalla classe ListAccImpl su come la classe List funziona con gli screen reader. In particolare, si noti questa frase nella sezione sugli oggetti figlio (renderer):

... l'accessibilità delle voci dell'elenco è gestita dall'Elenco; l'accessibilità Le proprietà di implementazione e accessibilità dei renderer di elementi vengono ignorate da Flash Player.

Questo spiega perché lo screen reader legge solo il valore della labelDisplay o il ritorno del labelFunction. Anche se hai focalizzato un oggetto nel renderer, sembra che List sia ancora in controllo w/rispetto allo screen reader. Ciò è ulteriormente confermato nella classe docs for the AccImpl (anche dalla sezione bambini):

Flash Player non supporta una vera gerarchia di oggetti accessibili. Se DisplayObject ha un oggetto accessibilityImplementation, gli oggetti accessibilityImplementation dei suoi figli vengono ignorati.

Suggerimenti

  • Prova a impostare la proprietà focusEnabled del List a false. Quando si sfoglia l'interfaccia utente, gli oggetti nei renderer verranno comunque messi a fuoco, ma lo stesso non lo farà. Poiché i documenti per AccImpl sembrano implicare, lo List pertanto non gestirà l'interazione con lo screen reader e sarà rimandato agli oggetti focalizzabili nel renderer.

  • Provare ad estendere la classe List ed eseguire l'override del metodo initializeAccessibility(). Questo metodo (presumo) viene chiamato dal ciclo di vita del componente Flex ed è il punto in cui l'elenco ottiene la possibilità di interagire con lo screen reader. Se non si inizializza l'implementazione dell'accessibilità, il mio pensiero è che rinvierà tale responsabilità agli oggetti nel proprio renderer. Oppure potrebbe bloccarsi e bruciarsi.

Questo è tutto quello che ho, spero che aiuta ... buona domanda, si prega di fare la parte quello che si trova.

+0

Ho seguito i vostri suggerimenti e hanno funzionato a meraviglia! Sono stato in grado di inserire i controlli all'interno di ogni elemento di rendering! Grazie! – Adz

+0

@Adz è fantastico! Per la mia curiosità e il beneficio degli altri, su quale soluzione ti sei accontentato? –

+0

Ho applicato entrambi i suggerimenti, non si è comportato correttamente con entrambi. – Adz