2016-02-26 55 views
3

我有一個SwitchCompat切換與文本(HQ/LQ爲不同品質的流)。 對於視力良好的用戶,我認爲這顯然意味着什麼。 但我有問題找到一個很好的解決方案如何使它可訪問。安卓切換文本打開/關閉防止從對講讀

我在一般

<android.support.v7.widget.SwitchCompat 
      android:id="@+id/qualitySwitch" 
      style="@style/SwitchStyleCompat" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:textOff="LQ" 
      android:textOn="HQ" 
      android:contentDescription="stream quality" 

設置爲SwitchCompat一個ContentDescription並希望每次SwitchCompat被觸發時設置一個contentDescription。

if (isChecked) { 
streamPlayerService.desireHighQuality(); 
mQualitySwitch.setContentDescription("quality high"); 

} else { 
streamPlayerService.desireLowQuality(); 
mQualitySwitch.setContentDescription("quality low"); 
} 

但即便是contentDescription,紋理基元/ textOff標誌也仍然可以通過Talkback產生類似「質量高HQ開關」閱讀。有什麼辦法可以禁用textOn/textOff屬性的閱讀,這樣只有contentDescription被讀取給用戶?

回答

1

你可以得到你想要的確切行爲。但做到這一點的唯一方法是自定義控件,或者一些涉及開關背後的隱形視圖的駭客。如果TalkBack遇到交換機,它會按照您所說的方式將其讀出。共享狀態和價值信息。在你去找一個自定義控件之前,讓我給你介紹一下我認爲是一個更易於使用的解決方案。同時也鼓勵您查看我的開源應用程序,該應用程序處理大量可訪問性概念,實際上包含我在此與您分享的方法示例。

https://github.com/dequelabs/Deque-University-for-Android

請記住,可訪問任何文本或狀態必須以同等的方式共享。您無法將用戶聽到的內容與他們看到的內容分開。我們不僅關心盲人,而且關心那些只能看到困難的人。如果公告與他們期望的完全不同,它可能會非常混亂。另外,如果公告令人困惑,或許你應該重新考慮對於有視力的用戶是否同樣困惑......

因此,如果你有一個開/關開關,在通知期間的某個時刻它讀取或關閉。這是用戶將習慣的用途,對於使用您的控件的用戶可能是缺乏用戶的用戶,如果您要覆蓋此行爲,則會非常混淆。如果您的控件文本讓視力不佳的用戶感到困惑,並且您重申了這個確切的文字,那麼對於不具視力的用戶來說,這將同樣令人困惑。實際上,這比爲話語提示用戶創建單獨的用戶體驗更「容易」。這僅僅意味着您有一個用戶體驗問題,需要更改標籤的措辭。

完成此操作的最佳方法是使用LabelFor屬性。

<TextView 
    android:labelFor="@+id/your_id" 
    android:text="My Text" /> 

<ToggleButton android:id="@+id/your_id"/> 

這將導致其閱讀過這樣的:

HQ,開關,質量高

如果集中在交換機上,這正是你所需要的信息。交換機上的文本是「HQ」,它是一個開關,它與視覺標籤「質量高」相關聯。狀態,角色,名字......連續排列。這是一件美麗的事情!

如果您認爲這仍然令人困惑,您也可以向TextView添加內容描述,以便TalkBack用戶獲得一些額外的上下文,儘管它應該非常類似於實際的文本。 (EX:包含實際的文本,附加信息,或者做一些縮略詞擴展)。

<TextView 
    android:labelFor="@+id/my_id" 
    android:text="Quality High" 
    android:contentDescription="... Quality High ..." /> 

<ToggleButton android:id="@+id/my_id"/> 

這將導致內容描述被讀出,因此這樣的,而不是讀客:

HQ,開關...質量高...

或者像這樣:

<TextView 
    android:labelFor="@+id/my_id" 
    android:text="A misleading acronym CA" 
    android:contentDescription="A misleading acronym Certificate Authority" /> 

<ToggleButton android:id="@+id/my_id"/> 
+0

非常感謝你這個徹底的答案,我會盡快嘗試:) – Eve