我一直在努力剥离一个库,该库处理我在现有应用中创建的对讲添加辅助功能。最初我的自定义视图都是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
相关内容,看来我可以View
与Views
相关的内容{1}};但是,我想知道是否需要这样做
Accessibility.with(new RelativeLayout(...)) // Returns ViewGroupAccessibility as RelativeLayout is a ViewGroup
//
...将返回一个ViewGroupAccessibility
,可以处理ViewGroup
相关内容,其中包含许多不同的View
和ViewGroup
。 (请参阅本文底部的代码以了解实际用途,以及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 {
...
}
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
答案 0 :(得分:1)
是的,有一种方法可以在View的各个区域/组件之间移动可访问性。但是,这需要一点工作。
从这里开始: https://developer.android.com/reference/android/view/accessibility/AccessibilityNodeProvider.html