2016-09-12 65 views
5

我有一個視圖,它有一個長按動作處理程序。我使用內容描述來設置當視圖獲得焦點時對講所發出的信息。如何更改Android對講指示雙擊和長按

目前,它說我的內容描述越來越聚焦之後的權利,並在短暫的停頓後說:

雙擊即可啓動,雙擊並保持長按

我想改變這一消息成類似

雙擊即可「動作1」,雙擊並保持「action 2」

有沒有辦法做到這一點?

我看着onPopulateAccessibilityEvent(),它得到TYPE_VIEW_ACCESSIBILITY_FOCUSED事件,但我無法更改所需的消息。

我是否缺少一些簡單的東西?

+1

我不認爲這是 - 我認爲這些是對講應用程序本身的默認說明。 –

回答

3

在API 21+中,您可以通過在視圖的AccessibilityNodeInfo上設置自定義操作來自定義動作名稱。有兩種方法:1)設置AccessibilityDelegate並覆蓋onInitializeAccessibilityNodeInfo委託方法或2)擴展視圖的類並覆蓋onInitializeAccessibilityNodeInfo

無論哪種方式,您將構建一個新的AccessibilityAction並使用AccessibilityNodeInfo.addAction將其設置在節點上。

如果您選擇使用一個委託,您可以按如下設置自定義描述的點擊動作:

view.setAccessibilityDelegate(new AccessibilityDelegate() { 
    @Override 
    public void onInitializeAccessibilityNodeInfo(
     View v, AccessibilityNodeInfo info) { 
    super.onInitializeAccessibilityNodeInfo(v, info); 

    // A custom action description. For example, you could use "pause" 
    // to have TalkBack speak "double-tap to pause." 
    CharSequence description = getResources().getText(R.string.my_click_desc); 
    AccessibilityAction customClick = new AccessibilityAction(
      AccessibilityAction.ACTION_ACTION_CLICK, description); 
    info.addAction(customClick); 
    } 
}); 

如果應用程序的目標API < 21,替換相應*Compat支持庫的方法。該功能沒有反向移植,因此您不會在API < 21上獲得自定義描述,但您可以避免在應用程序代碼中進行顯式版本檢查。

+0

將* Compat應用於此 - 您可以發佈一個示例嗎? setAccessibilityDelegate不採取compat,也沒有compat版本的setter。 – fobbymaster

+0

@fobbymaster 使用ViewCompat.setAccessibilityDelegate(View v,AccessibilityDelegateCompat委託) – qtyq

+0

@alanv,這隻會添加到現有的列表權?它仍然會說'雙擊激活',然後是'雙擊暫停'? – user3030130

1

看來AccessibilityAction發生了輕微變化alanv張貼了他的答案。這裏是一個工作解決方案使用ViewCompat

ViewCompat.setAccessibilityDelegate(view, new AccessibilityDelegateCompat() { 
    @Override 
    public void onInitializeAccessibilityNodeInfo(View host, AccessibilityNodeInfoCompat info) { 
     super.onInitializeAccessibilityNodeInfo(host, info); 
     // A custom action description. For example, you could use "pause" 
     // to have TalkBack speak "double-tap to pause." 
     CharSequence description = host.getResources().getText(R.string.my_click_desc); 
     AccessibilityActionCompat customClick = new AccessibilityActionCompat(
        AccessibilityNodeInfoCompat.ACTION_CLICK, description); 
     info.addAction(customClick); 
    } 
}); 
0

使用下面的代碼爲那些誰想要刪除所有短語ie。 「雙擊」。

ViewCompat.setAccessibilityDelegate(view, new AccessibilityDelegateCompat() { 
     @Override 
     public void onInitializeAccessibilityNodeInfo(View host, AccessibilityNodeInfoCompat info) { 
      super.onInitializeAccessibilityNodeInfo(host, info); 
      info.addAction(AccessibilityNodeInfoCompat.ACTION_FOCUS); 
     } 
}); 

這基本上是調用下面的代碼和requestFocus沒有任何與之相關的默認對講公告。

case AccessibilityNodeInfo.ACTION_FOCUS: { 
       if (!hasFocus()) { 
        // Get out of touch mode since accessibility 
        // wants to move focus around. 
        getViewRootImpl().ensureTouchMode(false); 
        return requestFocus(); 
       } 
      }