Android Fragments 如何避免TalkBack从阅读丢弃的片段

z6psavjg  于 9个月前  发布在  Android
关注(0)|答案(2)|浏览(77)

我正在开发一个简单的应用程序,它是在活动和片段中结构化的,其中一个要求是使其可访问,所以我做了所有的内容描述,导航,焦点等。
它工作得很好,除了片段,如果有一个活动加载了一个片段,对话会读取它的内容,然后用户点击一些东西和一个细节片段,这些片段可以添加到堆栈顶部。

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仍然导航它:(
谢谢大家,希望大家能在这个问题上有所启发:)
问候。

s2j5cfk0

s2j5cfk01#

https://medium.com/@guygriv/accessibility-and-fragment-transactions-1aef5596f9d4
我发现了这个,它很好地解决了这个问题,而不需要使用替换,
此链接描述了片段回栈更改,检查此添加的片段不是最后一个片段,然后将可访问性设置为IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS以禁用隐藏的片段可访问性,否则对于可见的片段,将可访问性设置为IMPORTANT_FOR_ACCESSIBILITY_YES

f0brbegy

f0brbegy2#

我发现的唯一方法是在片段事务中替换它们,这是一个缺点,因为你失去了片段的状态。

FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
BookDetailFragment book = BookDetailFragment.newInstance(id);
ft.replace(R.id.books_fragment_holder, book);
ft.addToBackStack(BookDetailFragment.TAG);
ft.commit();

我将继续研究如何正确地做到这一点。

相关问题