0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

最佳實踐 | 助您提升應用的無障礙功能

谷歌開發(fā)者 ? 來源:未知 ? 2022-11-28 18:00 ? 次閱讀
某些使用 Android 設備的用戶具有不同于他人的無障礙功能需求。為了幫助具有共同的無障礙功能需求的特定人群,Android 框架為開發(fā)者創(chuàng)建無障礙服務提供了相關功能,這種服務可將應用的內容呈現(xiàn)給此類用戶,并代表他們在應用中執(zhí)行操作。

Android 提供了一些系統(tǒng)無障礙服務,其中包括:

  • TalkBack: 幫助視力低下或失明的人。通過合成語音讀出內容,并在應用中執(zhí)行操作以響應用戶手勢。
  • 開關控制: 幫助有運動障礙的人。突出顯示互動元素,并執(zhí)行操作以響應用戶按某個按鈕的動作。用戶只使用 1 個或 2 個按鈕就能控制設備。


  • TalkBack

    https://support.google.com/accessibility/android/answer/6283677

  • 開關控制

    https://support.google.com/accessibility/android/answer/6122836


為了幫助具有無障礙功能需求的用戶順利使用您的應用,應用應遵循本頁中介紹的最佳做法,這些做法基于讓應用使用起來更沒有障礙中所述的關鍵準則。

以下各種最佳做法可以進一步改進應用的無障礙功能:
  • 標簽元素: 用戶應該能夠理解應用中每個有意義的互動界面元素的內容和用途。
  • 使用或擴展系統(tǒng)微件: 基于框架包含的視圖元素構建,而不是創(chuàng)建您自己的自定義視圖。框架的視圖和微件類已經提供了應用所需的大多數(shù)無障礙功能。
  • 使用除顏色之外的提示: 用戶應該能夠明確區(qū)分界面中的各類元素。為此,除了顏色之外,還應使用圖案和位置表示這些差異。
  • 讓媒體內容使用起來更沒有障礙: 嘗試向應用的視頻音頻內容添加說明,這樣使用這些內容的用戶就無需完全依靠視覺或聽覺提示。



標簽元素


請務必針對應用中的每個互動界面元素,為用戶提供實用且描述性的標簽。每個標簽都應說明特定元素的含義和用途。TalkBack 等屏幕閱讀器可以向依靠這些服務的用戶讀出這些標簽。

在大多數(shù)情況下,您可以在包含給定界面元素的布局資源文件中指定該元素的說明。雖然您通常使用 contentDescription 屬性添加標簽,如讓應用使用起來更沒有障礙指南中所述,但還需要牢記一些其他標簽添加方法,如下面幾部分所述。


可修改的元素


為可修改的元素 (如 EditText 對象) 添加標簽時,您可以列舉有效輸入的示例,除了讓相應的示例文字可由屏幕閱讀器讀出之外,最好還在元素本身中顯示這些文字。在這些情況下,您可以使用 android:hint 屬性,如以下代碼段所示:

<EditText
android:id="@+id/addressLine2"
android:hint="@string/aptSuiteBuilding" ... />


在這種情況下,View 對象的 android:labelFor 屬性應設為 EditText 元素的 ID。如需了解詳情,請參閱下文中介紹如何為相互描述的元素對添加標簽的部分。


  • EditText

    https://developer.android.google.cn/reference/android/widget/EditText


相互描述的元素對

給定的 EditText 元素通常會有一個相應的 View 對象,該對象描述了用戶應在 EditText 元素中輸入的內容。在搭載 Android 4.2 (API 級別 17) 或更高版本的設備上,您可以通過設置 View 對象的 android:labelFor 屬性來指明這種關系。


  • View

    https://developer.android.google.cn/reference/android/view/View


下面的代碼段顯示了為此類元素對添加標簽的示例:


<TextView
android:id="@+id/usernameLabel" ...
android:text="@string/username"
android:labelFor="@+id/usernameEntry" />


<EditText
android:id="@+id/usernameEntry" ... />



<TextView
android:id="@+id/passwordLabel" ...
android:text="@string/password
android:labelFor="@+id/passwordEntry" />


<EditText
android:id="@+id/passwordEntry"
android:inputType="textPassword" ... />


集合中的元素


向集合中的元素添加標簽時,每個標簽都應該是唯一的。這樣,系統(tǒng)的無障礙服務在讀出標簽時就可以特指屏幕上的 1 個元素。這種對應關系可讓用戶知道他們何時循環(huán)瀏覽界面,或何時將焦點移到了已經發(fā)現(xiàn)的元素。


需要特別注意的是,您應在重用布局內的元素(如 RecyclerView 對象) 中添加更多文字或上下文信息,以便能夠唯一標識每個子元素。


  • RecyclerView

    https://developer.android.google.cn/reference/androidx/recyclerview/widget/RecyclerView


為此,請在適配器實現(xiàn)中設置內容說明,如以下代碼段所示

data class MovieRating(val title: String, val starRating: Integer)


class MyMovieRatingsAdapter(private val myData: Array):
RecyclerView.Adapter() {


class MyRatingViewHolder(val ratingView: ImageView) :
RecyclerView.ViewHolder(ratingView)


override fun onBindViewHolder(holder: MyRatingViewHolder, position: Int) {
val ratingData = myData[position]
holder.ratingView.contentDescription = "Movie ${position}: " +
"${ratingData.title}, ${ratingData.starRating} stars"
}
}

相關內容組

如果應用顯示的多個界面元素構成一個自然組 (如歌曲的詳細信息或消息的屬性),應將這些元素整理到一個容器中,該容器通常是 ViewGroup 的子類。將容器對象的 android:screenReaderFocusable 屬性設為 true,并將每個內部對象的 android:focusable 屬性設為 false。這樣,無障礙服務就可以在單次語音中逐個讀出內部元素的內容說明。這樣整合相關元素有助于使用輔助技術的用戶更高效地發(fā)現(xiàn)屏幕上的信息。


  • android:screenReaderFocusable

    https://developer.android.google.cn/reference/android/view/View#attr_android:screenReaderFocusable

  • android:focusable

    https://developer.android.google.cn/reference/android/view/View#attr_android:focusable


注意: 在 Android 8.1 (API 級別 27) 及更低版本中,android:screenReaderFocusable 屬性不可用,因此應改為設置容器的 android:focusable 屬性。

以下代碼段包含彼此相關的內容片段,因此容器元素 (即 ConstraintLayout 的實例) 的 android:screenReaderFocusable 屬性設為 true,每個內部 TextView 元素的 android:focusable 屬性設為 false:

<ConstraintLayout
android:id="@+id/song_data_container" ...
android:screenReaderFocusable="true">


<TextView
android:id="@+id/song_title" ...
android:focusable="false"
android:text="@string/my_song_title" />
<TextView
android:id="@+id/song_artist"
android:focusable="false"
android:text="@string/my_songwriter" />
ConstraintLayout>


由于無障礙服務在單次語音中讀出內部元素的說明,因此務必確保每條說明都簡明扼要地傳達出元素的含義。

自定義組標簽

如果需要,您可以通過為某個組本身提供內容說明,替換平臺中該組的內部元素說明的默認分組和排序。

以下代碼段展示了一個示例自定義組說明:


android:id="@+id/song_data_container" ...
android:screenReaderFocusable="true"
android:contentDescription="@string/title_artist_best_song">



android:id="@+id/song_title" ...



android:text="@string/my_song_title" />

android:id="@+id/song_artist"



android:text="@string/my_songwriter" />


嵌套組

如果應用的界面顯示多維信息 (如節(jié)日活動的每日列表),應對內部組容器使用 android:screenReaderFocusable 屬性。這種標簽添加方案可以很好地平衡發(fā)現(xiàn)屏幕內容所需的語音條數(shù)與每條語音的長度。

以下代碼段展示了一種為較大的組內的組添加標簽的方法:

<ConstraintLayout
android:id="@+id/festival_event_table" ... >
<ConstraintLayout
android:id="@+id/stage_a_event_column"
android:screenReaderFocusable="true">





ConstraintLayout>
<ConstraintLayout
android:id="@+id/stage_b_event_column"
android:screenReaderFocusable="true">





ConstraintLayout>
ConstraintLayout>

文字中的標題

某些應用使用標題總結屏幕上顯示的多組文字。如果特定的 View 元素表示一個標題,您可以通過將該元素的 android:accessibilityHeading 屬性設為 true,表明它的無障礙服務用途。


  • android:accessibilityHeading

    https://developer.android.google.cn/reference/android/view/View#attr_android:accessibilityHeading


無障礙服務的用戶可以選擇瀏覽標題,而不是瀏覽段落或字詞。這種靈活性可改善文字瀏覽體驗。


無障礙窗格標題

在 Android 9 (API 級別 28) 及更高版本中,您可以為屏幕的窗格提供使用起來沒有障礙的標題。出于無障礙目的,窗格是窗口中能夠從視覺上加以區(qū)分的部分,如 Fragment 的內容。為了讓無障礙服務能夠理解與窗口行為類似的窗格行為,您應該為應用的窗格指定描述性標題。這樣一來,當窗格的外觀或內容發(fā)生變化時,無障礙服務就可以為用戶提供更精細的信息。

如需指定窗格的標題,請使用 android:accessibilityPaneTitle 屬性,如以下代碼段所示:

<MyShoppingCartView
android:id="@+id/shoppingCartContainer"
android:accessibilityPaneTitle="@string/shoppingCart" ... />


<MyShoppingBrowseView
android:id="@+id/browseItemsContainer"
android:accessibilityPaneTitle="@string/browseProducts" ... />

  • android:accessibilityPaneTitle

    https://developer.android.google.cn/reference/android/R.attr#accessibilityPaneTitle


裝飾性元素

如果界面中某個元素的存在只是為了讓內容看起來間距合理或布局美觀,請將其 android:contentDescription 屬性設為 "null":

https://developer.android.google.cn/reference/android/view/View#attr_androidcontentDescription


如果應用僅支持搭載 Android 4.1 (API 級別 16) 或更高版本的設備,您可以將這些純裝飾性元素的 android:importantForAccessibility 屬性設為 "no"。



擴展系統(tǒng)微件


要點:在設計應用的界面時,請使用或擴展位于 Android 類層次結構中盡可能靠下位置的系統(tǒng)微件。位于層次結構最下方的系統(tǒng)微件已經具備應用所需的大多數(shù)無障礙功能。擴展系統(tǒng)提供的這些微件比根據更通用的 View、ViewCompat、CanvasCanvasCompat 類創(chuàng)建您自己的微件更容易。

如果您必須直接擴展 ViewCanvas (這可能是高度個性化體驗或游戲關卡所必需的),請參閱讓自定義視圖使用起來更沒有障礙。


  • View

    https://developer.android.google.cn/reference/kotlin/android/view/View

  • ViewCompat

    https://developer.android.google.cn/reference/kotlin/androidx/core/view/ViewCompat

  • Canvas

    https://developer.android.google.cn/reference/kotlin/android/graphics/Canvas

  • CanvasCompat

    https://github.com/material-components/material-components-android/blob/master/lib/java/com/google/android/material/canvas/CanvasCompat.java

  • 讓自定義視圖使用起來更沒有障礙

    https://developer.android.google.cn/guide/topics/ui/accessibility/custom-views


本部分介紹了如何實現(xiàn)一種特殊類型的 Switch,稱為 TriSwitch。TriSwitch 對象的工作方式與 Switch 對象類似,不同之處在于,TriSwitch 的每個實例允許用戶在 3 種可能的狀態(tài)之間切換。

  • Switch

    https://developer.android.google.cn/reference/android/widget/Switch


從類層次結構最下方擴展

Switch 對象從其層次結構中的幾個框架界面類繼承一些屬性:
View
? TextView
? Button
? CompoundButton
? Switch


新的 TriSwitch 類最好直接從 Switch 類擴展。這樣,Android 無障礙功能框架就可以提供 TriSwitch 類所需的大多數(shù)無障礙功能:

  • 無障礙操作: 告知系統(tǒng)無障礙服務如何模擬TriSwitch 對象上執(zhí)行的各種可能的用戶輸入。(繼承自 View。)
  • 無障礙事件: 告知無障礙服務當屏幕刷新或更新時,TriSwitch 對象的外觀會發(fā)生的各種可能的變化方式。(繼承自 View。)
  • 特征: 有關每個 TriSwitch 對象的詳細信息,例如其顯示的任何文字的內容。(繼承自 TextView。)
  • 狀態(tài)信息: TriSwitch 對象的當前狀態(tài)的說明,如 "選中" 或 "未選中"。(繼承自 CompoundButton。)
  • 狀態(tài)的文字說明: 文字類說明,解釋了各種狀態(tài)的含義。(繼承自 Switch。)

繼承自 Switch 及其父類的這種聚合行為幾乎就是 TriSwitch 對象的預期行為。因此,您的實現(xiàn)可以著重于將可能的狀態(tài)數(shù)從 2 種擴展到 3 種。

定義自定義事件


當您擴展某個系統(tǒng)微件時,可能會改變用戶與該微件互動方式的某一方面。請務必定義這些互動變化,以便無障礙服務可以更新應用的微件,就像用戶直接與微件互動一樣。


一般準則是,對于您替換的每個基于視圖的回調,您還需要通過替換 ViewCompat.replaceAccessibilityAction() 來重新定義相應的無障礙操作。在應用的測試中,您可以通過調用 ViewCompat.performAccessibilityAction() 來驗證這些重新定義的操作的行為。


  • ViewCompat.replaceAccessibilityAction()

    https://developer.android.google.cn/reference/androidx/core/view/ViewCompat#replaceAccessibilityAction(android.view.View,%20androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat,%20java.lang.CharSequence,%20androidx.core.view.accessibility.AccessibilityViewCommand)

  • ViewCompat.performAccessibilityAction()

    https://developer.android.google.cn/reference/androidx/core/view/ViewCompat#performAccessibilityAction(android.view.View,%20int,%20android.os.Bundle)


此原則如何對 TriSwitch 對象起作用

與普通的 Switch 對象不同,點按 TriSwitch 對象可以循環(huán)切換 3 種可能的狀態(tài)。因此,需要更新相應的 ACTION_CLICK 無障礙操作:
class TriSwitch(context: Context) : Switch(context) {
// 0, 1, or 2.
var currentState: Int = 0
private set


init {
updateAccessibilityActions()
}


private fun updateAccessibilityActions() {
ViewCompat.replaceAccessibilityAction(this, ACTION_CLICK,
action-label) {
view, args -> moveToNextState()
})
}


private fun moveToNextState() {
currentState = (currentState + 1) % 3
}
}



使用除顏色之外的提示


為了幫助有色覺缺陷的用戶,請使用除顏色之外的提示區(qū)分應用屏幕中的界面元素。具體方法包括采用不同的形狀或大小、提供文字或視覺圖案,或者添加基于音頻的反饋或基于輕觸手勢的觸感反饋來表示元素的差異。


下圖顯示了一個 Activity 的兩個版本。一個版本僅使用顏色區(qū)分工作流程中兩種可能的操作。另一個版本采用了最佳做法: 除了顏色之外,還使用了形狀和文字來突出兩個選項之間的差異:

△ 僅使用顏色創(chuàng)建界面元素的示例 (左圖),
以及使用顏色、形狀和文字創(chuàng)建界面元素的示例 (右圖)


讓媒體內容使用起來更沒有障礙


如果您開發(fā)的應用包含視頻剪輯或音頻錄音等媒體內容,應設法為具有不同類型的無障礙功能需求的用戶提供支持,讓他們能夠理解此類內容。特別是,我們建議您做到以下幾點:

  • 添加可讓用戶暫?;蛲V共シ琶襟w、調整音量以及切換字幕的控件。
  • 如果視頻提供的信息對于完成工作流程至關重要,應以其他格式提供相同的內容,如轉錄內容。


其他資源


如需詳細了解如何讓您的應用使用起來更沒有障礙,請參閱下面列出的其他資源:


  • Codelab: 基本的 Android 無障礙功能

    https://developer.android.google.cn/codelabs/starting-android-accessibility#0
  • 博文: 無障礙功能: 是否所有用戶都能使用您的應用?

    https://android-developers.googleblog.com/2012/04/accessibility-are-you-serving-all-your.html


歡迎您持續(xù)關注我們,及時了解更多開發(fā)技術和產品更新等資訊動態(tài)。




?點擊屏末||即刻了解無障礙功能更多相關內容




原文標題:最佳實踐 | 助您提升應用的無障礙功能

文章出處:【微信公眾號:谷歌開發(fā)者】歡迎添加關注!文章轉載請注明出處。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 谷歌
    +關注

    關注

    27

    文章

    6168

    瀏覽量

    105397

原文標題:最佳實踐 | 助您提升應用的無障礙功能

文章出處:【微信號:Google_Developers,微信公眾號:谷歌開發(fā)者】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    4G模組之UDP應用的最佳實踐!

    今天說的是4G模組之UDP應用,展示最佳實踐,送你參考。
    的頭像 發(fā)表于 11-08 09:24 ?368次閱讀
    4G模組之UDP應用的<b class='flag-5'>最佳</b><b class='flag-5'>實踐</b>!

    MES系統(tǒng)的最佳實踐案例

    效率、降低成本、保證產品質量。 MES系統(tǒng)的最佳實踐案例 引言 在當今競爭激烈的制造業(yè)環(huán)境中,企業(yè)必須不斷尋求創(chuàng)新和改進的方法來保持競爭力。MES系統(tǒng)作為一種關鍵的信息技術工具,已經被廣泛應用于各種制造行業(yè),以實現(xiàn)生產過程的優(yōu)化和管理。本文將探討MES系統(tǒng)的
    的頭像 發(fā)表于 10-27 09:33 ?933次閱讀

    邊緣計算架構設計最佳實踐

    邊緣計算架構設計最佳實踐涉及多個方面,以下是一些關鍵要素和最佳實踐建議: 一、核心組件與架構設計 邊緣設備與網關 邊緣設備 :包括各種嵌入式設備、傳感器、智能手機、智能攝像頭等,負責采
    的頭像 發(fā)表于 10-24 14:17 ?431次閱讀

    云計算平臺的最佳實踐

    云計算平臺的最佳實踐涉及多個方面,以確保高效、安全、可擴展和成本優(yōu)化的云環(huán)境。以下是一些關鍵的最佳實踐: 一、云成本優(yōu)化 詳細分析云使用情況 :通過細致的監(jiān)控和分析,識別低ROI(投資
    的頭像 發(fā)表于 10-24 09:17 ?364次閱讀

    開發(fā)者大會成功舉辦 vivo用科技搭建人與數(shù)字世界的無障礙橋梁

    2024年10月10日,vivo開發(fā)者大會在深圳舉辦,其中信息無障礙分會場受到外界廣泛關注。vivo副總裁、OS產品副總裁、vivo AI全球研究院院長周圍及全國政協(xié)委員,中國殘疾人聯(lián)合會理事,中國
    發(fā)表于 10-12 14:18 ?143次閱讀
    開發(fā)者大會成功舉辦 vivo用科技搭建人與數(shù)字世界的<b class='flag-5'>無障礙</b>橋梁

    HarmonyOS NEXT應用元服務開發(fā)Accessibility(信息無障礙)介紹

    添加無障礙焦點、無障礙朗讀文本等。一、能力范圍 無障礙狀態(tài)查詢:為應用提供無障礙服務開啟狀態(tài)、觸摸瀏覽開啟狀態(tài)查詢接口,以便應用根據無障礙
    發(fā)表于 10-09 10:29

    衰減 AMC3301 系列輻射發(fā)射 EMI 的最佳實踐

    電子發(fā)燒友網站提供《衰減 AMC3301 系列輻射發(fā)射 EMI 的最佳實踐.pdf》資料免費下載
    發(fā)表于 09-11 09:59 ?0次下載
    衰減 AMC3301 系列輻射發(fā)射 EMI 的<b class='flag-5'>最佳</b><b class='flag-5'>實踐</b>

    毫米波雷達器件的放置和角度最佳實踐應用

    電子發(fā)燒友網站提供《毫米波雷達器件的放置和角度最佳實踐應用.pdf》資料免費下載
    發(fā)表于 09-09 09:57 ?2次下載
    毫米波雷達器件的放置和角度<b class='flag-5'>最佳</b><b class='flag-5'>實踐</b>應用

    電機驅動器電路板布局的最佳實踐

    電子發(fā)燒友網站提供《電機驅動器電路板布局的最佳實踐.pdf》資料免費下載
    發(fā)表于 09-05 11:33 ?17次下載
    電機驅動器電路板布局的<b class='flag-5'>最佳</b><b class='flag-5'>實踐</b>

    RTOS開發(fā)最佳實踐

    基于RTOS編寫應用程序時,有一些要注意事項。在本節(jié)中,您將學習RTOS開發(fā)最佳實踐,例如POSIX合規(guī)性、安全性和功能安全認證。
    的頭像 發(fā)表于 08-20 11:24 ?456次閱讀

    華為致力于推動無障礙技術發(fā)展

    的智能生活新紀元。這場聚焦前沿科技的盛會并未止步于技術的展示,而是進一步拓展至人文情懷與平等包容,用一場“湖畔對談”無障礙活動以及TECH4ALL數(shù)字包容展館,為我們呈現(xiàn)了一次科技與人文的對話。 ? 今年已經是第三年,華為在HDC現(xiàn)場舉辦與華為無障礙用戶交流
    的頭像 發(fā)表于 06-29 16:13 ?743次閱讀

    鴻蒙ArkTS聲明式開發(fā):跨平臺支持列表【無障礙屬性】 通用屬性

    組件可以設置相應的無障礙屬性和事件來更好地使用無障礙能力。
    的頭像 發(fā)表于 06-11 17:30 ?403次閱讀
    鴻蒙ArkTS聲明式開發(fā):跨平臺支持列表【<b class='flag-5'>無障礙</b>屬性】 通用屬性

    交通運輸部大力推廣適老化無障礙交通服務

    4月3日,交通運輸部發(fā)布了關于2024年適老化無障礙交通出行服務擴容提質增效的實施方案。方案明確了出租車電動召回和網絡預約車輛的“一鍵召喚”服務要在地級市以上的所有城市實現(xiàn)全區(qū)覆蓋;
    的頭像 發(fā)表于 04-03 16:15 ?906次閱讀

    基于STM32H743IIT6開發(fā)的代碼,是否能不經修改無障礙地運行在STM32H753IIT6上?

    基于 STM32H743IIT6 開發(fā)的代碼,是否能不經修改無障礙地運行在STM32H753IIT6上?
    發(fā)表于 03-29 06:19

    蘋果iOS 18和macOS 15無障礙功能升級

    Adaptive Voice Shortcuts功能可讓用戶把獨特的口語短語綁定到無障礙設定中。用戶能自行設定定制化短語,只需講述這段話便能啟動他們所需的輔助功能設置; 例如VoiceOver,語音控制,縮放等諸多現(xiàn)有輔助
    的頭像 發(fā)表于 03-08 11:08 ?725次閱讀