W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
編寫:K0ST - 原文:http://developer.android.com/training/accessibility/accessible-app.html
本課程將教您:
添加內(nèi)容描述(Content Descriptions)
設(shè)計焦點導航(Focus Navigation)
觸發(fā)可達性事件(Accessibility Events)
測試你的程序
Android平臺本身有一些專注可達性的特性,這些特性可以幫助你專門為那些視覺上或生理上有缺陷的用戶在應用上做特別的優(yōu)化。然而,正確的優(yōu)化方式或最簡單利用這個特性的方法往往不是那么顯而易見的。本課程將給您演示如何利用和實現(xiàn)這些策略和平臺的特性功能,構(gòu)建一個更友好的具有可達性的Android應用。
一個好的交互界面上的元素通常不需要特別使用一個標簽來表明這個元素的作用。例如對于一個任務型應用來說,一個項目旁邊的勾選框表達的意思就非常明確,或者對于一個文件管理應用,垃圾桶的圖標表達的意思也非常清除。然而對于具有視覺障礙的用戶來說,其他類型的UI交互提示是有必要的。
幸運的是,我們可以很輕松的給一個UI元素加上標簽,這樣類似于TalkBack這樣的基于語音的Accessibility Service就可以將標簽的內(nèi)容朗讀出來。如果你的標簽在整個應用的生命周期中不太可能會發(fā)生變化(比如‘停止’或者‘購買’),你就可以在XML布局文件中對android:contentDescription屬性進行設(shè)置。代碼如下:
<Button
android:id=”@+id/pause_button”
android:src=”@drawable/pause”
android:contentDescription=”@string/pause”/>
然而,在很多情況下描述的內(nèi)容是基于上下文環(huán)境的,比如說一個開關(guān)按鈕的狀態(tài),或者在list中一片可選的數(shù)據(jù)項。在運行時編輯內(nèi)容描述可以使用setContentDescription()方法,代碼如下:
String contentDescription = "Select " + strValues[position];
label.setContentDescription(contentDescription);
將以上功能添加進您的代碼是提高您應用可達性的最簡單的方法。嘗試著將那些有用的地方都加入內(nèi)容描述,但同時要避免像web開發(fā)者那樣將所有的元素都標注,那樣會產(chǎn)生大量的無用信息。比如說,不要將應用圖標的內(nèi)容描述設(shè)置為‘應用圖標’。這只會對用戶的瀏覽產(chǎn)生干擾。
來試試吧!下載TalkBack(谷歌開發(fā)的一款可達性應用),在Settings > Accessibility > TalkBack將它開啟。然后使用你的應用聽聽看TalkBack發(fā)出的語音提示。
你的應用除了支持觸摸操作外,更應該支持其他的導航方式。很多Android設(shè)備不僅僅提供了觸摸屏,還提供了其他的導航硬件比如說十字鍵、方向鍵、軌跡球等等。除此之外,最新的Android發(fā)行版本也支持藍牙或USB的外接設(shè)備,比如鍵盤等等。
為了實現(xiàn)這種方式的導航,一切用戶可以用來可導航的元素(navigational elements)都需要設(shè)置為focusable(聚焦),它可以在運行時通過View.setFocusable()方法來進行設(shè)定,或者也可以在XML布局文件中使用android:focusable來設(shè)置。
每個UI控件有四個屬性,android:nextFocusUp,android:nextFocusDown,android:nextFocusLeft,android:nextFocusRight,用戶在導航時可以利用這些屬性來指定下一個焦點的位置。系統(tǒng)會自動根據(jù)布局的方向來確定導航的順序,如果在您的應用中系統(tǒng)提供的方案并不合適,您可以用這些屬性來進行自定義的修改。
比如說,下面就是一個關(guān)于按鈕和標簽的例子,他們都是可聚焦的(focusable),按向下鍵會將焦點從按鈕移到文字上,按向上會重新將焦點移到按鈕上。
<Button android:id="@+id/doSomething"
android:focusable="true"
android:nextFocusDown=”@id/label”
... />
<TextView android:id="@+id/label"
android:focusable=”true”
android:text="@string/labelText"
android:nextFocusUp=”@id/doSomething”
... />
證實您的應用運行正確的直觀方法,最簡單的方式就是在Android虛擬機里運行您的應用,然后使用虛擬器的方向鍵來在各個元素之間導航,使用OK按鈕來代替觸摸操作。
如果你在你的Android框架中使用了View組件,當你選中了一個View或者是焦點變化的時候,可達性事件(AccessibilityEvent)都會產(chǎn)生。這些事件會被傳遞到Accessibility Service中進行處理,實現(xiàn)一些輔助功能,如語音提示等。
如果你寫了一個自定義的View,請確保它在合適的時候產(chǎn)生事件。使用sendAccessibilityEvent(int)函數(shù)可以產(chǎn)生可達性事件,其中的參數(shù)表示事件的類型。完整的可達性事件類型可查閱AccessibilityEvent參考文檔。
比如說,你拓展了一個圖片的View,你希望在它聚焦的時候使用鍵盤打字可以在其中插入題注,這時候發(fā)送一個TYPE_VIEW_TEXT_CHANGED事件就非常合適,盡管它不是本身就構(gòu)建在這個圖片View中的。產(chǎn)生事件的代碼如下:
public void onTextChanged(String before, String after) {
...
if (AccessibilityManager.getInstance(mContext).isEnabled()) {
sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_TEXT_CHANGED);
}
...
}
請確保您在添加可達性功能后測試它的有效性。為了測試內(nèi)容描述可達性事件,請安裝并啟用一個Accessibility Service。比如說使用TalkBack,它是一個免費的開源的屏幕讀取軟件,可在Google Play上進行下載。Service啟動后,請測試您應用中所有的功能,同時聽聽TalkBack的語音反饋。
同時,嘗試著用一個方向控制器來控制你的應用,而非使用直接觸摸的方式。你可以使用一個物理設(shè)備,比如十字鍵、軌跡球等。如果沒有條件,可以使用android虛擬器,它提供了虛擬的按鍵控制。
在測試導航與反饋的同時,和在沒有任何視覺提示的情況下,應該對你的應用大概是一個什么樣子有所認識。出現(xiàn)問題就修復優(yōu)化它們,最終就會開發(fā)出一個更易用可達的Android程序。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: