对于我工作的应用程序,我需要实现可访问性。除了一个屏幕以外,一切都运行正常,这个屏幕上有两个片段添加到我的活动中。基本上,位于上方的片段是用于输入密码的拨号键盘。该片段是通过fragmentTransaction添加的。
问题在于TalkBack焦点被设置在下面片段的元素上。
您知道是否有一种方法可以将TalkBack焦点设置在拨号片段上吗?我只想“禁用”下面的片段来获取焦点。
谢谢,
对于我工作的应用程序,我需要实现可访问性。除了一个屏幕以外,一切都运行正常,这个屏幕上有两个片段添加到我的活动中。基本上,位于上方的片段是用于输入密码的拨号键盘。该片段是通过fragmentTransaction添加的。
问题在于TalkBack焦点被设置在下面片段的元素上。
您知道是否有一种方法可以将TalkBack焦点设置在拨号片段上吗?我只想“禁用”下面的片段来获取焦点。
谢谢,
更新
我找到了解决方案。在进行片段事务之前,您可以禁用第一个片段的可访问性。
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!
add 方法也会导致点击下面的 fragment 视图时出现问题。
因此,请使用 replace。
rootViewOfFragment.setImportantForAccessibility(IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS);
在我看来,使用replace fragment而不是add fragment是最好的答案,请参见此处
sendAccessibilityEvent
(AccessibilityEvent.TYPE_VIEW_FOCUSED)。 sendAccessibilityEvent
会改变Talkback的焦点。我对Talkback不是很了解,请在SO上阅读链接When using TalkBack, what is the preferred way to alert the user when the contents of a TextView have changed?。
祝好运...
添加
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
内部对我有效。
@Override
public void onResume() {
super.onResume();
yourView.requestAccessibilityFocus();
}