如何更改双击和长按的Android对讲说明

问题描述 投票:11回答:4

我有一个带有长按动作处理程序的视图。我使用内容描述来设置视图获得焦点时“对讲”所要传达的信息。

[当前,它表示我的内容描述是在获得焦点之后,稍停片刻后说:

双击以激活,双击并按住以长按

我想将此消息更改为类似内容

双击至“动作1”,双击并按住“动作2”

有办法吗?

我调查了onPopulateAccessibilityEvent(),它得到了TYPE_VIEW_ACCESSIBILITY_FOCUSED事件,但是我无法更改所需的消息。

我想念一些简单的东西吗?

android accessibility talkback android-a11y
4个回答
11
投票

自[[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); } });

9
投票
在API 21+中,您可以通过在View的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上获得自定义描述,但是您将能够避免在应用程序代码中进行明确的版本检查。

3
投票
对想要删除所有短语的人使用下面的代码,即。 “双击激活”,“双击并按住不放”。

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); } });


1
投票
对想要删除所有短语的人使用下面的代码,即。 “双击”。

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(); } }

© www.soinside.com 2019 - 2024. All rights reserved.