首页 文章

如何激活片段视图内的对讲?

提问于
浏览
0

我目前正在添加辅助功能作为我的应用程序内的新功能 . 我的目标是用户使用Android集成的TalkBack服务进行导航 .

一切都运作良好,因为我在我的活动布局内的元素上设置 content description

<View
          style="@style/custom.style"
          android:contentDescription="@string/my_string_value"/>

这样,每次显示我的活动时,TalkBack都会读取内容描述值 .

我只使用一个在其上推几个片段的活动没有取得同样的成功 . 因此,如果我尝试在片段布局中的任何元素上设置 content description ,则不会被(自动)读取,直到它检测到触摸事件(我希望TalkBack自动执行它,就像在视图中一样)活动布局)

为了得到一个我期望的结果,我在片段类中这个:

public abstract class myFragment extends Fragment  {
...
  @Override
      public View onCreateView(LayoutInflater inflater, ViewGroup container,   Bundle savedInstanceState) {
       ...
       myCustomView = (LinearLayout) rootView.findViewById(R.id.duende);
       myCustomView.requestFocus();
  }
}

到目前为止,这还没有成功,同样的事情将可访问性设置为 content changed .

getWindow().getDecorView().sendAccessibilityEvent(AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED);

有没有人遇到过类似的问题?

2 回答

  • 0

    不确定你还在寻找解决方案,但对于未来的寻求者:) -

    很多时候,焦点请求只能在post / postdelay函数中调用一次 .

    示例 -

    myCustomView.postDelayed(new Runnable() {
                @Override
                public void run() {
                    myCustomView.setFocusable(true);
                    myCustomView.requestFocus();
                    myCustomView.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_ACCESSIBILITY_FOCUSED);
                }
            },1000);
    

    在处理片段时,我喜欢调用焦点,输入焦点,就像上一个答案中的人所调用的那样,以及可访问性焦点,因为在片段上实现可访问性时,您可以通过一些恼人的问题 . 因此,这总是为我做的工作 .

  • 2

    首先,重要的是要注意Fragments的功能与正常活动中的布局没有区别 . 片段只是构造代码的便捷方式 . 如果您将应用程序编码为一系列片段,或者单个活动中的一堆布局是相同的,那么Android / Accessibility API会看到什么 . 话虽如此,我相信您正在寻找的是以下内容:

    您需要做的是移动辅助功能焦点 .

    myCustomView.requestFocus();
    

    正在移动我认为的输入焦点 . 这对TalkBack没有任何影响,实际上除了你正在使用键盘导航,或者我们正在讨论的是EditText框之外,它实际上完全没有意义 . 你想要做的是移动辅助功能/ TalkBack焦点 . 这可以通过以下代码行完成:

    myCustomView.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_FOCUSED);
    

    注意:请记住WCag 2.0标准,特别是在自动关注TalkBack用户时 . 对于没视力的用户来说,这可能会变得非常混乱!

相关问题