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