如何避免 TalkBack 读取已关闭的片段

问题描述 投票:0回答:2

我正在开发一个由“活动”和“片段”构成的简单应用程序,要求之一是使其易于访问,因此我完成了所有内容描述、导航操作、焦点等。

它工作得很好,除了片段之外,如果有一个加载片段的活动,对讲会读取其内容,然后用户单击某些内容和可以添加到堆栈顶部的详细片段。

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);

-- 已编辑-- 制作了一个 DumpView 层次结构,其中没有被消除的片段的痕迹,但对讲仍然可以导航它:(

谢谢,我希望有人可以解决这个问题:)

问候。

android android-fragments accessibility talkback
2个回答
2
投票

https://medium.com/@guygriv/accessibility-and-fragment-transactions-1aef5596f9d4

我发现了这个,它很好地解决了问题,无需使用替换,

此链接描述了片段返回堆栈更改,检查添加的片段不是最后一个片段,然后将可访问性设置为 IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS 以禁用隐藏片段可访问性,否则对于可见的片段将可访问性设置为 IMPORTANT_FOR_ACCESSIBILITY_YES


1
投票

我发现下面的片段不被读取的唯一方法是在片段事务中替换它们,这是一个缺点,因为您会丢失该片段的状态......

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

我将继续寻找如何正确地做到这一点。

© www.soinside.com 2019 - 2024. All rights reserved.