2016-06-15 27 views
2

這在多個班級類型的幾個地方發生,但我現在堅持一個按鈕示例。Android - Talkback在內容描述結束時宣佈課程類型。

所以我有一個按鈕,我想對講宣佈爲「播放」。內容描述設置爲「播放」。然而,對講也是在宣佈課程,所以它讀作「播放按鈕」。

我嘗試瞭解決方案,我發現其他地方通過重載onInitializeAccessibilityNodeInfo方法

private void setupContentDescriptors() { 
    mPlayPauseButton.setAccessibilityDelegate(new View.AccessibilityDelegate() { 
     public void onInitializeAccessibilityNodeInfo(View host, AccessibilityNodeInfo info) 
     { 
      super.onInitializeAccessibilityNodeInfo(host, info); 

      //blanked to prevent talkback from announcing class/type 
      info.setClassName(""); 
      info.setContentDescription("Play"); 
     } 
    }); 
} 

類的名稱設置爲「」完美工作,但我很快就發現了這種解決方案只是工作的API 23以上。 根據文檔「從API 23開始,在主機方法之後調用委託方法,所有屬性都要被修改而不被主機類覆蓋」。

我嘗試了其他幾種方法無濟於事。 想法?

回答

3

在API 23之前,如果您需要重寫類名,則需要創建子類並實現onInitializeAccessibilityNodeInfo()。您不能通過使用委託來覆蓋它。

也就是說,TalkBack正在嘗試通過說出角色描述爲您的用戶提供一致的高質量體驗。在絕大多數情況下,您不應該嘗試重寫此行爲。

0

如果你有一個小而衆所周知的用戶圈,也許這是另一種選擇alanv的答案。

在對講5.2.1(*),你可以這樣做:

在「設置 - >輔助功能 - >對講 - >設置 - >詳細程度

在那裏,你可以打開/關閉入口「說話元素類型」

有了這個,如果他想聽到的元素類型或不是用戶本身可以決定的。這是另一種說法不能與對講讀取元素的方式修補。


(*)我沒有找到有關何時引入說話元素的詳細設置的文檔。在使用Talkback 5.2.1的我的Android設備上工作,而使用Talkback 5.0.3的設備沒有此設置。所以介於兩者之間的任何地方都必須介紹。