我正在开发一个 android 应用程序并测试可访问性。在我们的 MainActivity 中,我们有一个左导航 DrawerView,并根据用户的左导航选择加载各种带有回收器视图的片段。
在测试可访问性/对讲时,我们注意到如果对讲集中在当前加载的片段回收器视图中的项目上,当左侧导航打开时,它通常会继续从背景片段中读取项目(意味着抽屉打开并且在前面片段)。
我们试图让辅助功能停止大声朗读背景,并在抽屉打开时读取抽屉布局的第一个视图。
我添加了一个调用来清除焦点 onDrawer open 像这样,认为一旦它重新获得焦点,它就会默认为抽屉中的第一个项目。根据需要,焦点确实落在我的抽屉视图中的第一个项目上,但它会一直播放背景项目,直到完成,然后最后读取它关注的左侧导航项目。
@Override
public void onDrawerOpened(View drawerView) {
//Clear Current Focus to allow Drawer items to take
drawerView.bringToFront();
getCurrentFocus().clearFocus();
super.onDrawerOpened(drawerView);
我在 onDrawerSlide 中尝试了相同的方法,并尝试像这样中断对讲:
View focused = getCurrentFocus();
if (focused != null) {
((AccessibilityManager) focused.getContext().getSystemService(Context.ACCESSIBILITY_SERVICE)).interrupt();
该日志帮助我确保我永远不会获得当前焦点的空视图。
有人有任何提示或解决方案吗?