![](/img/trans.png)
[英]How to change talkback instructions for double tap to activate for RemoteView used in widgets?
[英]How to change Android talkback instructions for double tap and long press
我有一個長按動作處理程序的視圖。 我使用內容描述來設置當視圖獲得焦點時 Talkback 會說話的消息。
目前,它在獲得焦點后立即顯示我的內容描述,並在短暫的停頓后顯示:
雙擊激活,雙擊並按住長按
我想將此消息更改為類似
雙擊“動作 1” ,雙擊並按住“動作 2”
有沒有辦法這樣做?
我查看了onPopulateAccessibilityEvent()
,它獲得TYPE_VIEW_ACCESSIBILITY_FOCUSED
事件,但我無法更改所需的消息。
我錯過了一些簡單的東西嗎?
自從alanv發布他的答案以來, AccessibilityAction
似乎略有變化。 這是使用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);
}
});
在 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_CLICK, description);
info.addAction(customClick);
}
});
如果您的應用程序面向 API < 21,請替換相應的*Compat
支持庫方法。 該功能未向后移植,因此您不會在 API < 21 上獲得自定義描述,但您將能夠避免在應用程序代碼中進行顯式版本檢查。
對於那些想要刪除所有短語 ie 的人,請使用下面的代碼。 “雙擊激活”,“雙擊並按住以長按”。
mSubTitleText = (TextView) view.findViewById(R.id.txt_subtitle);
ViewCompat.setAccessibilityDelegate(mSubTitleText, new AccessibilityDelegateCompat() {
@Override
public void onPopulateAccessibilityEvent(View host, AccessibilityEvent event) {
host.setClickable(false);
host.setLongClickable(false);
}
});
對於那些想要刪除所有短語 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();
}
}
這是一個示例:
ViewCompat.setAccessibilityDelegate(set_actions_button, object : AccessibilityDelegateCompat() {
override fun onInitializeAccessibilityNodeInfo(v: View, info: AccessibilityNodeInfoCompat) {
super.onInitializeAccessibilityNodeInfo(v, info)
info.addAction(AccessibilityActionCompat(
AccessibilityNodeInfoCompat.ACTION_CLICK, "Edit note"))
info.addAction(AccessibilityActionCompat(
AccessibilityNodeInfoCompat.ACTION_LONG_CLICK, "Copy note"))
}
})
我的一些設備正在添加“雙擊並按住以長按”等。我只想閱讀我的整個段落並僅添加“雙擊激活”。 所以我是這樣寫的;
ViewCompat.setAccessibilityDelegate(<YOUR_TEXTVIEW>, object : AccessibilityDelegateCompat() {
override fun onInitializeAccessibilityNodeInfo(host: View, info: AccessibilityNodeInfoCompat) {
super.onInitializeAccessibilityNodeInfo(host, info)
info.removeAction(AccessibilityNodeInfoCompat.AccessibilityActionCompat.ACTION_CLICK)
info.isClickable = false
info.isLongClickable = false
info.text = "${<YOUR_TEXTVIEW>.text}\n" + "Double tap to activate."
host.isLongClickable = false
}
})
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.