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

时间:2015-09-16 01:08:28

标签: android talkback accessibility-api

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

一切运作良好,因为我在活动布局中的元素上设置内容描述,即

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

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

我只使用一个活动推动了几个片段,并没有取得同样的成功。因此,如果我尝试在片段布局中的任何元素上设置内容描述,则在检测到触摸事件之前不会被自动读取(我希望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();
  }
}

到目前为止,这个天堂还没有取得成功,同样的做法是将可访问性设置为内容已更改

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

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

2 个答案:

答案 0 :(得分:2)

不确定您是否仍在寻找解决方案,但未来寻求者:) -

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

示例 -

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

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

答案 1 :(得分:0)

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

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

myCustomView.requestFocus();

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

myCustomView.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_FOCUSED);

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