我目前正在我的应用程序中添加辅助功能作为新功能。 我的目标是用户将使用 TalkBack 进行导航。 Android 集成的服务。
一切正常,因为我在 Activity 布局内的元素上设置了内容描述,即
<View
style="@style/custom.style"
android:contentDescription="@string/my_string_value"/>
这样,每次显示我的 Activity 时,TalkBack 都会读取内容描述值。
仅使用一项向其推送多个 fragment 的 Activity ,我还没有取得同样的成功。因此,如果我尝试在 fragment 布局内的任何元素上设置内容描述,则在检测到触摸事件之前不会(自动)读取该内容(我希望 TalkBack 会自动执行此操作,就像 Activity 布局中的 View 一样)
为了获得我期望的结果,我在 fragment 类中这样做:
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);
有人遇到过类似的问题吗?
最佳答案
不确定您是否仍在寻找解决方案,但对于 future 的寻求者:) -
很多时候,焦点请求仅在 post/postdelay 函数中调用一次后才会起作用。
示例 -
myCustomView.postDelayed(new Runnable() {
@Override
public void run() {
myCustomView.setFocusable(true);
myCustomView.requestFocus();
myCustomView.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_ACCESSIBILITY_FOCUSED);
}
},1000);
在使用 fragment 时,我喜欢调用焦点、输入焦点(如上一个答案中的人所调用的那样)和可访问性焦点,因为在 fragment 上实现可访问性时,您可能会遇到一些恼人的问题。因此这总是对我有用。
关于android - 如何在 fragment View 内激活 Talkback?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32598131/