gpt4 book ai didi

Android - 将 TalkBack 辅助功能焦点设置到特定 View

转载 作者:IT王子 更新时间:2023-10-28 23:29:56 24 4
gpt4 key购买 nike

启用 TalkBack 后,是否可以将辅助功能焦点手册设置为特定 View ?例如,当我的 Activity 启动时,我希望 TalkBack 自动关注某个 Button( View 周围的黄框)并阅读其内容描述。

到目前为止我已经尝试过:

    myButton.setFocusable(true);
myButton.setFocusableInTouchMode(true);
myButton.requestFocus();

requestFocus() 似乎只是请求输入焦点,与可访问性焦点无关。我也试过:

    myButton.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_ACCESSIBILITY_FOCUSED);
myButton.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_FOCUSED);
myButton.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_TEXT_CHANGED);
myButton.announceForAccessibility("accessibility test");
myButton.performAccessibilityAction(64, null); // Equivalent to ACTION_ACCESSIBILITY_FOCUS

AccessibilityManager manager = (AccessibilityManager) getSystemService(Context.ACCESSIBILITY_SERVICE);
if (manager.isEnabled()) {
AccessibilityEvent e = AccessibilityEvent.obtain();
e.setSource(myButton);
e.setEventType(AccessibilityEvent.TYPE_VIEW_ACCESSIBILITY_FOCUSED);
e.setClassName(getClass().getName());
e.setPackageName(getPackageName());
e.getText().add("another accessibility test");
manager.sendAccessibilityEvent(e);
}

这些似乎都不起作用。

最佳答案

免责声明:强制将 Activity 加载的焦点放在任何地方,但始终位于顶部栏(好吧,几乎永远不应该说),但实际上,只是不要这样做。它违反了 WCAG 2.0 的各种规定,包括 3.2.1 和 3.2.3,分别关于可预测的导航和上下文变化。通过这样做,您实际上可能会使您的应用更难以访问。

http://www.w3.org/TR/WCAG20/#consistent-behavior

结束免责声明。

您正在使用正确的函数调用。您需要做的就是:

myButton.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_FOCUSED);

问题更可能是您尝试执行此操作的点。对讲会在 Activity 周期稍晚一点的时候附加到您的 Activity 中。以下解决方案说明了这个问题,老实说,我不确定是否有更好的方法来做到这一点。我尝试了 onPostResume,这是 Android 操作系统调用的最后一个回调,关于加载 Activity ,但我仍然不得不添加延迟。

@Override
protected void onPostResume() {
super.onPostResume();

Log.wtf(this.getClass().getSimpleName(), "onPostResume");

Runnable task = new Runnable() {

@Override
public void run() {
Button theButton = (Button)WelcomeScreen.this.findViewById(R.id.idButton);
theButton.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_FOCUSED);
}
};

final ScheduledExecutorService worker = Executors.newSingleThreadScheduledExecutor();

worker.schedule(task, 5, TimeUnit.SECONDS);

}

您也许可以创建自定义 View 。 View 中的回调可能会提供您需要执行此操作的逻辑,而无需竞争条件!如果有时间,我可能会再研究一下。

关于Android - 将 TalkBack 辅助功能焦点设置到特定 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28472985/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com