对于我正在处理的应用程序,我需要实现可访问性。一切正常,除了一个屏幕,我必须将片段添加到我的活动中。基本上,上面的片段是用于输入密码的拨号键盘。这个片段被添加了一个片段事务。
问题是对讲焦点设置在下面片段的元素上。
你知道是否有办法在拨号片段上设置对讲焦点?我只想“禁用”下面的片段以获得焦点
谢谢,
对于我正在处理的应用程序,我需要实现可访问性。一切正常,除了一个屏幕,我必须将片段添加到我的活动中。基本上,上面的片段是用于输入密码的拨号键盘。这个片段被添加了一个片段事务。
问题是对讲焦点设置在下面片段的元素上。
你知道是否有办法在拨号片段上设置对讲焦点?我只想“禁用”下面的片段以获得焦点
谢谢,
更新
我想出了解决方案。您可以在执行片段事务之前禁用第一个片段的可访问性。
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 下的可访问性违规。虽然如果屏幕上的元素没有完全被您的“顶部”片段隐藏,这也是一种违规行为,您实际上应该保持原样。
添加
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
对我有用。
也许您可以在第二个片段恢复时调用 requestAccessibilityFocus()
@Override
public void onResume() {
super.onResume();
yourView.requestAccessibilityFocus();
}
查看方法视图。sendAccessibilityEvent
(AccessibilityEvent.TYPE_VIEW_FOCUSED)。sendAccessibilityEvent
从 Talkback 更改焦点。我对 Talkback 了解不多,请阅读 SO @ 上的链接使用 TalkBack 时,当 TextView 的内容发生更改时,提醒用户的首选方式是什么?.
祝你好运...