2013-07-02 19 views
5

Chúng tôi đang điều chỉnh ứng dụng web intranet của mình thành tuân thủ WCAG 2.0. Ứng dụng này có một danh sách các điều khiển phức tạp, nhưng tôi không thể đọc màn hình để đọc bất cứ điều gì trong danh sách nhưng labelDisplay hoặc whats được trả về bởi labelFunction của danh sách.Cách đọc bộ đọc màn hình để đọc một thành phần ItemRenderer

dưới đây là ví dụ được đun sôi, "labelOne" được đọc bởi trình đọc màn hình và hộp danh sách và kết quả của nhãnFunction cho từng mục trong danh sách.

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

"nhãn truy cập"; đảm bảo nhãn được đọc và nằm trong thứ tự tab.

package accessibility { 
import mx.managers.IFocusManagerComponent; 

import spark.components.Label; 

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

tôi có thể tab quá mỗi mục trong danh sách, tức là "labelDisplay", "labelTwo" và "nút", nhưng trình đọc màn hình không đọc chúng ra.

Có thể nhận từng nhãn và nút đọc không?

Trả lời

1

Tôi có một vài gợi ý, nhưng tôi không biết liệu chúng có hoạt động hay không (trình đọc màn hình của tôi nằm trong bộ lọc).

Trước tiên, bạn có thể tìm thấy một số interesting reading here từ lớp ListAccImpl về cách hoạt động của lớp học List với trình đọc màn hình. Đặc biệt, lưu ý câu này trong phần về các đối tượng con (trình kết xuất đồ họa):

... khả năng truy cập của các mục danh sách được Danh sách quản lý; khả năng truy cậpThực hiện và khả năng truy cậpTính năng của các trình kết xuất mục bị bỏ qua bởi Trình phát Flash.

Điều này giải thích tại sao trình đọc màn hình chỉ đọc giá trị labelDisplay hoặc trả lại labelFunction. Mặc dù bạn đã tập trung vào một đối tượng trong trình kết xuất đồ họa, có vẻ như List vẫn nằm trong quyền kiểm soát w/đối với trình đọc màn hình. Điều này được xác nhận thêm trong lớp học docs for the AccImpl (cũng từ phần trẻ em):

Trình phát Flash không hỗ trợ phân cấp thực sự của các đối tượng có thể truy cập. Nếu một DisplayObject có một đối tượng implementplementplement, thì các đối tượng AccessibilityImplementation của các con của nó sẽ bị bỏ qua.

Gợi ý

  • Hãy thử thiết lập các focusEnabled tài sản của List để false. Khi bạn tab thông qua giao diện người dùng, các đối tượng trong trình kết xuất sẽ vẫn được tập trung, nhưng chính bản thân số List sẽ không. Do các tài liệu cho AccImpl có vẻ hàm ý, do đó, List do đó sẽ không quản lý tương tác với trình đọc màn hình và nó sẽ được hoãn lại cho các đối tượng có thể lấy tiêu điểm trong trình kết xuất đồ họa.

  • Thử mở rộng lớp List và ghi đè phương thức initializeAccessibility(). Phương pháp này (tôi giả định) được gọi bằng vòng đời thành phần Flex và là nơi danh sách có khả năng tương tác với trình đọc màn hình. Nếu bạn không khởi tạo triển khai trợ năng, suy nghĩ của tôi là sau đó nó sẽ trì hoãn trách nhiệm đó cho các đối tượng trong trình kết xuất của bạn. Hoặc nó có thể sụp đổ và đốt cháy.

Đó là tất cả những gì tôi có, hy vọng điều này sẽ giúp ... câu hỏi hay, vui lòng chia sẻ những gì bạn tìm thấy.

+0

Tôi đã theo dõi các đề xuất của bạn và họ đã xử lý! Tôi đã có thể tab vào các điều khiển bên trong mỗi renderer mục! Cảm ơn bạn! – Adz

+0

@Adz thật tuyệt vời! Đối với sự tò mò của tôi, và lợi ích của người khác, bạn đã giải quyết giải pháp nào? –

+0

Tôi đã áp dụng cả hai đề xuất, nó không hoạt động đúng với cả hai đề xuất đó. – Adz

Các vấn đề liên quan