我正在开发一个简单的应用程序,它是在活动和片段中结构化的,其中一个要求是使其可访问,所以我做了所有的内容描述,导航,焦点等。
它工作得很好,除了片段,如果有一个活动加载了一个片段,对话会读取它的内容,然后用户点击一些东西和一个细节片段,这些片段可以添加到堆栈顶部。
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
audios = AudiosListFragment.newInstance(params);
ft.add(R.id.audios_fragment_holder, audios);
ft.commit();
如果用户继续导航对讲仍然记得丢失的片段的每个元素的位置。
有没有办法清除事件的可访问性列表并强制它再次获取它?可访问性管理器似乎没有任何方法。
AccessibilityManager manager = (AccessibilityManager) getActivity().getSystemService(Context.ACCESSIBILITY_SERVICE);
manager.getAccessibilityServiceList();
--编辑--我尝试过但没有成功的事情。
从片段中的视图创建发送事件。
AccessibilityEvent event =
AccessibilityEvent.obtain(AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED);
AccessibilityDelegate delegate = new AccessibilityDelegate();
v.setAccessibilityDelegate(delegate);
delegate.dispatchPopulateAccessibilityEvent(container, event);
中断片段的onResume上的所有挂起文本。
AccessibilityManager mgr = (AccessibilityManager)
getActivity().getSystemService(Context.ACCESSIBILITY_SERVICE);
mgr.interrupt();
请求装饰器视图注册一个window_content_change或window_state_change事件。
getWindow().getDecorView()
.sendAccessibilityEvent(AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED);
-- EDITED --创建了一个DumpView层次结构,并且在中没有被丢弃片段的痕迹,但talkback仍然导航它:(
谢谢大家,希望大家能在这个问题上有所启发:)
问候。
2条答案
按热度按时间s2j5cfk01#
https://medium.com/@guygriv/accessibility-and-fragment-transactions-1aef5596f9d4
我发现了这个,它很好地解决了这个问题,而不需要使用替换,
此链接描述了片段回栈更改,检查此添加的片段不是最后一个片段,然后将可访问性设置为IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS以禁用隐藏的片段可访问性,否则对于可见的片段,将可访问性设置为IMPORTANT_FOR_ACCESSIBILITY_YES
f0brbegy2#
我发现的唯一方法是在片段事务中替换它们,这是一个缺点,因为你失去了片段的状态。
我将继续研究如何正确地做到这一点。