繁体   English   中英

Android TalkBack 和片段堆栈

[英]Android TalkBack and fragment stack

对于我正在处理的应用程序,我需要实现可访问性。 一切正常,除了一个屏幕,我必须将片段添加到我的活动中。 基本上,上面的片段是用于输入密码的拨号键盘。 这个片段被添加了一个片段事务。

问题是对讲焦点设置在下面片段的元素上。

你知道是否有办法在拨号片段上设置对讲焦点? 我只想“禁用”下面的片段以获得焦点

谢谢,

更新

我想出了解决办法。 您可以在执行片段事务之前禁用第一个片段的可访问性。

rootView = inflater.inflate(R.layout.first_fragment, null, false);

rootView.setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS);

现在你提交你的片段交易。 第二个片段不会将焦点泄漏到第一个片段。

不要忘记启用第一个片段的可访问性,以防您回到第一个片段。

if(rootView != null) {
    rootView.setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_YES);
}

你在使用 fragmentTransaction.add 吗?

如果是这样,您应该使用 fragmentTransaction.replace!

单击下面的片段视图时,添加功能也有问题。

所以请使用替换。

你的问题不是“发送”焦点到正确的地方。 强制将注意力转移到不同的地方通常是一个坏主意,而且无法访问。 您的问题是屏幕上的元素不可见,但被 TalkBack 聚焦。 您要做的是在 TalkBack 中隐藏这些元素。 实际上,您可能想要完全删除它们,但让我们假设它们需要出现在屏幕上。 您可以做的是将它们从无障碍服务中隐藏起来:

rootViewOfFragment.setImportantForAccessibility(IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS);

这将从 TalkBack 中隐藏这些视图。 这是比强制关注特定元素更好的解决方案,因为这通常是 WCag 2.0 下的可访问性违规。 尽管如果屏幕上的元素没有被您的“顶部”片段完全隐藏,这也是一种违规行为,您实际上应该保持原样。

也许您可以在第二个片段恢复时调用 requestAccessibilityFocus()

@Override
public void onResume() {
    super.onResume();
    yourView.requestAccessibilityFocus();
}

添加

view.setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_YES);`
view.performAccessibilityAction(AccessibilityNodeInfo.ACTION_ACCESSIBILITY_FOCUS, null);

onResume里面

并添加

view.setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS);

onPause里面对我onPause

使用替换片段而不是添加片段是 IMO 的最佳答案,请参见此处

https://stackoverflow.com/a/21684520/3540391

查看方法视图。 sendAccessibilityEvent (AccessibilityEvent.TYPE_VIEW_FOCUSED)。 sendAccessibilityEvent将焦点从 Talkback 更改。 我对 Talkback 不太了解,请阅读 SO @ 上的链接, 当使用 TalkBack 时,当 TextView 的内容发生变化时,提醒用户的首选方式是什么? .

祝你好运...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM