当前位置: 首页 > 知识库问答 >
问题:

如何避免TalkBack读取被解雇的片段

贺立果
2023-03-14

我正在开发一个以活动和片段为结构的简单应用程序,其中一个要求是使其可访问,因此我完成了所有内容描述、导航、焦点等。

它工作得很好,除了片段,如果有一个活动加载一个片段,对讲读取它的内容,然后用户点击一些东西,一个细节片段可以被添加到堆栈的顶部。

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层次结构,其中没有被删除片段的踪迹,但talkback仍然导航它:(

谢谢,我希望有人能对这个问题有所帮助:)

问候。

共有2个答案

逑沛
2023-03-14

我找到的唯一不读取下面片段的方法是在片段事务上替换它们,这是一个缺点,因为您会丢失该片段的状态。。。

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

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

洪彬
2023-03-14

https://medium.com/@guygriv/可访问性和片段事务-1aef5596f9d4

我发现了这个,这很好地解决了问题,而不需要使用替换,

此链接描述了片段后台更改,请检查添加的片段是否不是最后一个片段,然后将可访问性设置为重要_FOR_Accessibility_NO_HIDE_Descents以禁用隐藏的片段可访问性,否则对于可见的片段,将可访问度设置为重要

 类似资料:
  • 在使用LabelPropagation时,我经常遇到此警告(这应该是一个错误,因为它完全无法传播): /usr/local/lib/python3.5/dist-packages/sklearn/semi_supervised/label_propagation。py:279:RuntimeWarning:true_divit自身中遇到无效值。label_distributions_/=标准化器

  • 有软件正在阻止 Firefox 安全地连接至此网站 segmentfault.com 很像是一个安全(连接加密)的网站,但我们未能与它建立安全连接。这个问题是由 Fiddler Root Certificate Authority 所造成,它是您的计算机或您所在网络中的软件。 您可以做什么? segmentfault.com 启用了被称为 HTTP严格传输安全(HSTS)的安全策略,Firefox

  • 我有一个,其中包含我通过设置的文本。 在我的例子中,这个文本只有“开”或“关”。 问题是Android TalkBack随后会读取例如“On ON ON,Switch,双击...”。 此外也无济于事。

  • 我正在尝试在未来的预定时间生成警报。下面是代码 主要活动。Java语言 警报eceiever.java content\u main。xml 舱单 我试图在一分钟后生成警报,但不幸的是什么都没有发生。我在这里做错了什么?此外,即使在手机重启/关机然后打开后,我如何确保我的日程安排仍然有效?

  • 我正在进行一项活动,其中有TabLayout和两个表示选项卡内容的片段。我在活动的OnCreate方法中手动管理打开选项卡的当前状态: 这只是一个简单的例子。我真正的代码是用C语言编写的,并且有一些其他逻辑来存储和管理活动重启之间的状态。 配置更改时的问题(例如开关方向): 打开的碎片被摧毁 活动被破坏 活动重启 在onCreate方法中,当调用super.onCreate(savedInstan

  • 问题内容: 我有此错误信息: 消息8134,级别16,状态1,第1行除以零错误。 编写SQL代码的最佳方法是什么,这样我就再也看不到此错误消息了? 我可以执行以下任一操作: 添加一个where子句,这样我的除数永远不会为零 或者 我可以添加一个case语句,以便对零进行特殊处理。 使用子句的最佳方法是吗? 有没有更好的方法,或者如何执行? 问题答案: 为了避免出现“被零除”错误,我们对此进行了如下