Ers*_*man 6 android talkback android-accessibility
背景:有什么问题
我的应用程序有这个词的首字母缩写词让我们假设它是
美国广播公司
当我使用 Google 的语音服务时,它会读出很棒的字母
但是,当我使用三星语音(S 语音)时,它会读出 1 个单词,这不是很好!
那么为什么不设置内容描述呢?
ABC出现在很多地方,设置替代内容描述是不可行的。它也可能会破坏其他语音服务的内容描述,这些服务可以像谷歌一样正确读出
我的计划
所以,我有一个问题了一段时间回来,我发现对于扩展类这个伟大的方法,ViewGroup这是onRequestSendAccessibilityEvent。综上所述,这个方法可以让你AccessibilityEvent在处理之前捕获一个以某种方式修改它。除其他外,您还可以获取要读取的内容描述并对其进行修改。
我的想法是获取当前正在使用的 TTS 或 TalkBack 服务引擎,并使用正则表达式编辑字母 ABC 的内容描述,如果是三星语音(S 语音),则将其设为 ABC。希望!
我的问题
任何人都知道AccessibilityEvent在全局或通用情况下处理的侦听器或回调函数吗?
onRequestSendAccessibilityEvent仅用于ViewGroup. 我找不到Activity.
任何人都知道如何捕获所有传入AccessibilityEvent或可能是我问题的替代解决方案
谢谢阅读!
没有辅助功能事件/委托不适用于活动,而且也不需要。每个都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);
}
});
}
Run Code Online (Sandbox Code Playgroud)
我还想指出,TalkBack 支持按字符导航的功能,并且这样的解决方案可能正在解决 TalkBack 用户认为不存在问题的问题。事实上,在某些情况下,这可能会被视为更糟糕。每当您更改残障人士看到的内容与实际内容相比时,您都必须非常小心。尽管公告更清晰:
"ABC" != "A B C"
Run Code Online (Sandbox Code Playgroud)
例如,在不同的情况下,人们可能会将这种行为视为一种“功能”,例如:
"NASA"
Run Code Online (Sandbox Code Playgroud)
一个天真的实现可能只是将所有内容描述“转为小写”或在所有大写字母之间添加一个空格。显然,这些解决方案中的每一个都会产生不同类型的问题。
我的观点是,如果屏幕上的内容让用户感到困惑,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.
Run Code Online (Sandbox Code Playgroud)
请注意,在我的字典中,我总是倾向于单词而不是单个字符公告:)。这样做的原因是,我没有改变字符串的性质。或者更确切地说,在任何情况下以下都是正确的:
oldString.equalsIgnoreCase(newString);
Run Code Online (Sandbox Code Playgroud)
现在将字符串本地化添加到方程中......这确实是一个非常复杂的问题。也许不去理会事情是最好的选择。
| 归档时间: |
|
| 查看次数: |
4270 次 |
| 最近记录: |