可访问性对话不会中断

时间:2018-02-27 14:39:55

标签: android android-accessibility android-drawer

我正在开发一款Android应用并测试辅助功能。在我们的MainActivity中,我们有一个左侧导航器DrawerView,并根据用户的左侧导航选择加载具有回收站视图的各种片段。

在测试辅助功能/对讲时,我们注意到如果对话主要关注当前加载的片段回收器视图中的项目,则当打开左侧导航时,它通常会继续从背景片段中读取该项目(意味着抽屉已打开)并在片段前面)。

我们正试图让辅助功能停止朗读背景,并在抽屉打开时阅读抽屉布局的第一个视图。

我添加了一个调用以清除焦点onDrawer打开,认为它会在重新获得焦点后默认为抽屉中的第一个项目。根据需要,焦点确实落在抽屉视图中的第一个项目上,但它会一直播放背景项目直到完成,然后最终读取它所关注的左侧导航项目。

@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();

日志帮助我确保我从未获得当前焦点的空视图。

任何人都有任何提示或解决方案吗?

1 个答案:

答案 0 :(得分:0)

我无法理解,当左侧导航打开时,它会获得焦点,只有TalkBack继续落后或焦点仍然落后......

如果导航器获得焦点并且它只是一个TalkBack问题而不是将以下属性放在导航器上获得初始焦点的元素上 -

android:accessibilityLiveRegion="assertive"

这将使TalkBack停止前一个阅读会话并使新焦点开始阅读。

现在,如果问题是你甚至没有得到焦点,因为留下来,添加这个帖子功能,要求焦点到你想要获得导航打开后的特定视图。将它放在打开导航的onClick中,这样一旦打开就会启动它 -

myCustomView.post(new Runnable() {
    @Override
    public void run() {
        myCustomView.requestFocus();
        myCustomView.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_ACCESSIBILITY_FOCUSED);
    }
});

希望这对你有所帮助。