我目前正在添加辅助功能作为我的应用程序内的新功能 . 我的目标是用户使用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 回答
不确定你还在寻找解决方案,但对于未来的寻求者:) -
很多时候,焦点请求只能在post / postdelay函数中调用一次 .
示例 -
在处理片段时,我喜欢调用焦点,输入焦点,就像上一个答案中的人所调用的那样,以及可访问性焦点,因为在片段上实现可访问性时,您可以通过一些恼人的问题 . 因此,这总是为我做的工作 .
首先,重要的是要注意Fragments的功能与正常活动中的布局没有区别 . 片段只是构造代码的便捷方式 . 如果您将应用程序编码为一系列片段,或者单个活动中的一堆布局是相同的,那么Android / Accessibility API会看到什么 . 话虽如此,我相信您正在寻找的是以下内容:
您需要做的是移动辅助功能焦点 .
正在移动我认为的输入焦点 . 这对TalkBack没有任何影响,实际上除了你正在使用键盘导航,或者我们正在讨论的是EditText框之外,它实际上完全没有意义 . 你想要做的是移动辅助功能/ TalkBack焦点 . 这可以通过以下代码行完成:
注意:请记住WCag 2.0标准,特别是在自动关注TalkBack用户时 . 对于没视力的用户来说,这可能会变得非常混乱!