View(而不是ViewGroup)是否包含多个UI组件,每个组件都需要对讲支持

时间:2016-07-09 11:21:57

标签: android view accessibility viewgroup talkback

Bacground

我一直在努力剥离一个库,该库处理我在现有应用中创建的对讲添加辅助功能。最初我的自定义视图都是ViewGroups,因此我使用ViewGroups(使用D-pad进行可聚焦导航,初始视图焦点和内容描述)让所有内容都令人惊讶地工作

当我将其移至独立库时,我注意到它不适用于View。我认为ViewGroup是超类,但事实证明View是超类。所以我一直试图找到一些解决我的问题的解决方法。我开始做以下事情,并根据这种方法提出问题......

代码问题

public class Accessibility {
    public static ViewGroupAccessibility with(ViewGroup viewGroup) {
        return new ViewGroupAccessibility(viewGroup);
    }
    public static ViewAccessibility with(View view){
        return new ViewAccessibility(view);
    }
}

我已经完全实现了ViewGroupAccessibility,我打算完全实现ViewAccessibility,因为它现在是一个存根。到目前为止,下面的代码适用于 TalkBack ,我可以使用ViewGroup执行ViewGroups相关内容,看来我可以ViewViews相关的内容{1}};但是,我想知道是否需要这样做

我所知道的

Accessibility.with(new RelativeLayout(...))  // Returns ViewGroupAccessibility as RelativeLayout is a ViewGroup
//

...将返回一个ViewGroupAccessibility,可以处理ViewGroup相关内容,其中包含许多不同的ViewViewGroup。 (请参阅本文底部的代码以了解实际用途,以及ViewGroupAccessibility可用的方法

Accessibility.with(new Button(...))  // Returns ViewAccessibility as Button is a View
//

...将返回一个ViewAccessibility,它只能处理单个View相关内容(这是我的假设)。只考虑Button

我不知道

// Hypothetical Usage
Accessibility
    .with(new ClassThatExtendsView_WithMultipleComponentsThatCanHaveAccessibilitySetOnEachComponentIndividually(...));

// Custom View that extends View
public class ClassThatExtendsView_WithMultipleComponentsThatCanHaveAccessibilitySetOnEachComponentIndividually extends View { 
    ... 
}
  • 这是否可能?如果不是,那我很好。如果是,那么I have a lot extra to think about
  • 它会返回一个只能处理单ViewAccessibility的{​​{1}},但那将是错误的返回。

提出问题的另一种方式是我保证,如果用户调用 View ,则给定视图将始终只是一个视图吗?就像一个按钮。或者View可以由多个组件构成

完整代码

您可以在https://codereview.stackexchange.com/questions/134289/easily-add-accessibility-to-your-app-as-an-afterthought-yes-as-an-afterthought查看代码(还有一个指向原始代码的GitHub链接)。我将详细介绍项目的启动方式,设计决策和未来目标,以帮助指导代码审查流程。

但是,以下是我对Accessibility.with(View)

用法的摘要
ViewGroup

1 个答案:

答案 0 :(得分:1)

是的,有一种方法可以在View的各个区域/组件之间移动可访问性。但是,这需要一点工作。

从这里开始: https://developer.android.com/reference/android/view/accessibility/AccessibilityNodeProvider.html