没有可访问性事件/代表不适用于活动,他们也不需要。每个都Activity
应该有一个根/内容视图,它是ViewGroup
. 这对我来说很好地过滤了活动中的所有可访问性事件:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
View contentView = findViewById(android.R.id.content);
contentView.setAccessibilityDelegate(new View.AccessibilityDelegate(){
@Override
public boolean onRequestSendAccessibilityEvent(ViewGroup host, View child, AccessibilityEvent event) {
Log.wtf("Event: " + event.toString());
return super.onRequestSendAccessibilityEvent(host, child, event);
}
});
}
我还要指出,TalkBack 支持按字符导航的功能,这样的解决方案可能正在解决 TalkBack 用户不认为是问题的问题。事实上,在某些情况下,这可能被视为更糟。每当您更改残障人士所看到的内容与实际内容相比时,您都必须非常小心地这样做。即使公告更干净:
"ABC" != "A B C"
例如,在另一种情况下,人们可能会将这种行为视为一种“特征”,例如:
"NASA"
一个天真的实现可能只是“toLowerCase”你所有的内容描述或在所有大写字母之间添加一个空格。显然,这些解决方案中的每一个都会产生不同类型的问题。
我的观点是,如果屏幕上的内容让用户感到困惑,TalkBack 让用户能够按字符导航。各种平台的 AT 用户将习惯于他们平台的“夸克”。通过使用上述解决方案之一,您可以强制它们使用不同的夸克。有时,最容易获得的解决方案就是"ABC" == "ABC"
让 AT 用户自己解决问题。
如果您不打算专门以“理想”方式修复所有字符串,那么最好不要管它。不过,最好的情况是正确考虑这两个问题以及在给定情况下哪种解决方案最适用。
我更喜欢用内容描述覆盖的一些例子,这可能会被正则表达式或字符串匹配捕获。一个好的实现是发现这些特定场景并通过 REGEX -> String 字典将它们“替换”为文本或内容描述属性,并将其设置为新的内容描述。
"OFF" -> "off" //This one is super dumb on Google's part. "OFF" shows up on every switch in the OS!
"ON" -> "on" //See above comment.
"NASA" -> "nasa"
etc.
请注意,在我的字典中,我总是使用单词而不是单个字符声明:)。原因是,我没有改变字符串的性质。或者更确切地说,在每种情况下,以下情况都是正确的:
oldString.equalsIgnoreCase(newString);
现在将字符串本地化添加到等式中,嗯……这确实是一个非常复杂的问题。也许只是不理会事情是最好的选择。