2014-07-17 74 views
6

在我的Android應用程序中,我有一個View,它顯示圖像並有一個關聯的ContentDescriptionAndroid:如何強制使用Explore-By-Touch/Talkback在AccessibilityFocus中重複當前視圖的ContentDescription?

我可以啓用設置 - > Accessibility->對講,與從對講設置觸摸瀏覽,然後單一的水龍頭上的查看閱讀ContentDescription大聲。

這一切都如預期的那樣。

不過,我想觸摸瀏覽重複ContentDescription如果我單身再次點擊相同View。例如,我的圖像和說明可能會更新,但它有AccessibilityFocus,所以說新的短語對用戶有幫助。我怎樣才能做到這一點?

我試過試用View.clearFocus()View.invalidate(),但沒有成功。

任何建設性的想法都會受到歡迎。

更新

我應該還提到,我想從API 8日起增加的支持。因此,我試圖盡我所能地使用API​​ 4的輔助功能界面。

我目前正在研究使用View.clearFocus()後跟View.requestFocus()來解決更新視圖問題的解決方案。這似乎在我的API 8和16的測試套件上工作至今。

我將再次更新最終結果,但歡迎在此期間提供進一步的建議。

回答

8

正如我的問題所承諾的,這裏是我的調查結果和一個工作解決方案。

首先,非常感謝alanv的幫助和支持,並回答了以後API(14歲以上)的問題。雖然他沒有找到更老的API的解決方案,但他提供了重要的信息,這些信息幫助我找到了答案。

在撰寫本文時,由於TalkBack中存在已知錯誤 - 請參閱Send accessibility event not linked to view以瞭解更多詳細信息,因此無法構建成功說話的AccessibilityEvent。如果事件源爲null,該事件由話語提示(v3.5.0_r105)忽略,作爲AccessibilityEvent.setSource(View)最早出現在API 14,它不是可以設置源之前是 - 看Google Eyes-Free issue #379

然而,有可能通過使用View.requestFocus()來使Android 生成這樣的事件,正如我之前暗示的那樣。

  1. 使用讓您的視圖可聚焦在其XML layout

    android:focusable="true"
    android:focusableInTouchMode="true"

  2. 在XML佈局設置使用View.setContentDescription(text)所說的文字中Activity.onCreateandroid:contentDescription="text",如果它是靜態的,或者在必要時動態地在代碼中。

  3. 當需要說出的文字時,使用View.requestFocus()將焦點移動到正確的視圖以觸發AccessibilityEvent

  4. 爲了確保短語重複(我的原始問題),請在請求前一步中的焦點之前調用View.clearFocus()

我有一個測試實施這種方法的API 8個工作,而且它也適用於API 16.它應該回到API 4,當Accessibility API首次推出的所有道路。

對於僅支持更新的Android API(14及更高版本)的開發者,此解決方案可能不是必需的,但我相信目前對於那些支持早期API中的輔助功能的其他選項目前還很少。祝你好運。

更新

不幸的是,alanv的答案似乎已經消失了 - 可能刪除 - 帶走了所有相關的細節和討論的意見。我試圖重新回到下面的要點。

  1. 如果是Android API 14和以後,有可能創建聚焦事件如下:

    if (mAccessibilityService.isEnabled()) { AccessibilityEvent event = AccessibilityEvent.obtain( AccessibilityEvent.TYPE_VIEW_FOCUSED); event.setSource(myView); // API 14 & later event.setClassName(myView.getClass().getName()); event.setPackageName(myView.getContext().getPackageName()); event.setEnabled(true); event.setContentDescription(text); myView.sendAccessibilityEventUnchecked(event); }

  2. 如果是Android API 16和以後,View.announceForAccessibility(text)可以使用。

+0

它對我來說就像一個魅力...... –

相關問題