《Android編程權威指南》第18 章惋嚎,本章會接觸到 TalkBack 輔助工具杠氢,讓視力障礙用戶也能方便地使用 CriminalIntent 應用。
一另伍、TalkBack
Google 開發(fā)的 Android 屏幕閱讀器鼻百,它實際是一個輔助服務,用戶可以操作它摆尝,讀出屏幕上的內容温艇。??
先下載 Android AccessibilitySuite ,由于我的手機沒有安裝 google play堕汞,emmm~ 然后從網頁上直接下載了 apk 文件安裝到手機上勺爱。
TalkBack
然后進入設置 -> 輔助功能 -> 無障礙 -> 其他「已安裝的服務」-> 開啟 Talkback。
開啟
然后就可以聽到手機喋喋不休的聲音了臼朗,提示點到了哪里這類邻寿,然后有視覺障礙用戶就可以根據提示玩轉手機了。雙指按住屏幕三秒以上即可關閉這個功能视哑。
只要啟用了TalkBack绣否,點擊瀏覽(Explore by Touch)功能也會開啟。點擊某UI元素挡毅,設備就會讀出相關信息蒜撮。可以自行嘗試一下的啦。
在物理設備上段磨,需要兩根手指按住屏幕上下滾動才能滾動列表取逾。
TalkBack 有線性瀏覽功能。向右滑屏苹支,輔助焦點移動到下一個UI元素砾隅;向左滑屏,移動到上一個UI元素债蜜。這樣就可以不用盲目的劃屏了晴埂。
二、實現非文字型元素可讀
添加內容描述
像應用中拍照按鈕沒有文字描述寻定,TalkBack 只能默認告訴用戶連擊兩次激活儒洛,這就很雞肋了,用戶并不知道在干嘛狼速,我們可以給像 ImageButton 這類控件添加內容描述琅锻,TalkBack 就有內容可讀了。
內容描述是一段針對控件的文字說明向胡,供 TalkBack 朗讀恼蓬。
Android 提供了給控件添加描述的屬性,可在 xml 中給看控件添加 android:contentDescription 或者是在代碼里給控件設置 someView.setContentDescription("xxx")捷枯,然后 TalkBack 會朗讀給用戶聽了滚秩。
打開 string.xml ,添加描述內容淮捆,中文英文都要添加噢:
<string name="crime_photo_btn_des">陋習現場拍照按鈕</string>
<string name="crime_photo_no_image">陋習現場照片(未拍照)</string>
<string name="crime_photo_image_description">陋習現場照片(已拍照)</string>
<string name="crime_photo_btn_des">Take photo of crime scene</string>
<string name="crime_photo_no_image">Crime scene photo</string>
<string name="crime_photo_image_description">crime scene photo</string>
然后再去給控件添加屬性描述啦郁油。
實現部件可聚焦
像 ImageView 控件默認是沒有聚焦的。有些控件攀痊,比如 Button桐腌,默認是可聚焦的,所以 ImageView 這樣的控件需要手動聚焦苟径。設置 android:focusable 屬性值為 true 或使用監(jiān)聽器都可以讓這些控件可聚焦案站。
<ImageView
android:id="@+id/img_crime_photo"
android:layout_width="100dp"
android:layout_height="100dp"
android:background="@android:color/darker_gray"
android:contentDescription="@string/crime_photo_no_image"
android:cropToPadding="true"
android:scaleType="centerInside" />
這樣一來,TalkBack 就可以在點到 ImageView 的時候給用戶讀取描述了棘街。
三蟆盐、提升輔助體驗
一些控件,比如 ImageView遭殉,雖會給用戶提供一些信息石挂,但沒有文字性內容。應給這些部件添加內容描述险污。如果某個控件提供不了任何有意義的說明痹愚,更應該把它的內容描述設置為 null富岳,讓 TalkBack 直接忽略它。這樣能提升用戶體驗拯腮。
這里給 ImageView 添加個動態(tài)的提示窖式,有照片提示有照片,無照片提示無照片需要拍照动壤。更新下 updatePhotoView() 函數萝喘。
private fun updatePhotoView(width: Int, height: Int) {
if (photoFile.exists()) {
val bitmap = PictureUtil.getScaledBitmap(photoFile.path, width, height)
mBinding.imgCrimePhoto.setImageBitmap(bitmap)
mBinding.imgCrimePhoto.contentDescription = getString(R.string.crime_photo_image_description)
} else {
mBinding.imgCrimePhoto.setImageDrawable(null)
mBinding.imgCrimePhoto.contentDescription = getString(R.string.crime_photo_no_image)
}
}
支持輔助功能并不難,作為開發(fā)人員琼懊,開發(fā) app 的時候應該更為友好的為一些障礙人員服務蜒灰,讓 app 更為友善。也算是一種貢獻啦肩碟。
四、深入學習:使用輔助功能掃描器
Google提供了一個輔助功能掃描器凸椿。它能評估應用在輔助功能方面做得如何并給出改進意見削祈。
下載 Accessibility Scanner ,可以選擇網上下載 apk 文件脑漫,再安裝到手機上髓抑,然后開啟給它授權。
1
授權完畢后會看到手機最上層有個圈圈里面有個勾勾优幸,然后打開 CriminalIntent app 吨拍,點下這個勾勾,會看到下圖网杆,點擊允許羹饰。
2
然后就能看到 Accessibility Scanner 給 CriminalIntent 的建議了。
3
要關閉輔助功能掃描器的話碳却,就去設置->輔助功能->無障礙->其他(已安裝的服務->無障礙功能掃描儀队秩,點擊關閉即可。
五昼浦、挑戰(zhàn)練習:優(yōu)化列表項
給手銬圖標添加內容描述馍资,別忘記兼容語言。再為屏幕上的每條記錄都動態(tài)添加一個待讀數據的匯總內容描述关噪。
<ImageView
android:id="@+id/img_item_crime_isSolved"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:contentDescription="@string/crime_is_solved"
android:src="@drawable/ic_solved"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />
六鸟蟹、挑戰(zhàn)練習:補全上下文信息
這里主要學習 android:labelFor 屬性,它指明 View 應該用作其他 View 的內容標簽使兔。把一個視圖和別的視圖關聯起來建钥,
比如,為時間按鈕添加個 TextView 顯示時間火诸,將它兩關聯起來锦针,TextView 應該顯示點擊了選擇時間按鈕后的內容。
<TextView
android:id="@+id/tv_crime_date_lable"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:labelFor="@+id/btn_crime_date"
tools:text="Date" />
<Button
android:id="@+id/btn_crime_date"
android:layout_width="match_parent"
android:layout_height="wrap_content"
tools:text="Wed Nov 14" />
參考:
https://support.google.com/accessibility/android/answer/7158690?hl=zh-Hans
這都是為障礙用戶提供的無障礙功能,挺不錯的奈搜。
七悉盆、挑戰(zhàn)練習:事件主動通知
研究下 View.announceForAccessibility(...) 函數,讓 TalkBack 用戶在相機關閉時就能掌握照片更新情況馋吗。記得要測試一把焕盟。
八、其他
在安裝了 TalkBack 的時候宏粤,我注意手機設置中的無障礙功能脚翘,里面其實自帶了屏幕朗讀功能,跟 TalkBack 類型绍哎,現在的手機供應商基本上在系統(tǒng)層面就已經內置了功能為一些特殊人群服務的来农。平時我都沒注意到,真的挺贊的崇堰,功能很友好沃于。讓人感受到了一絲溫暖。??
CriminalIntent 項目 Demo 地址:
https://github.com/visiongem/AndroidGuideApp/tree/master/CriminalIntent