我有一个duo lingo (英语+西班牙语)的android应用程序。我正在我的应用程序中实现辅助功能,我希望Talkback能够读取西班牙语单词和英语单词。英语和西班牙语单词将显示在不同的文本视图中。我的应用程序区域设置是英语,因此Talkback + google text to speech引擎不会读取西班牙语中的西班牙语单词,它们是用英语读取的,而且更多的时候它们的字母会被读出(预期行为)。
是否有任何工作或android推荐的解决方案来实现同样的目标。
最终,我希望Talkback或自定义辅助功能服务读出英语单词和西班牙语单词。
发布于 2017-06-09 07:02:17
免责声明:您必须对此解决方案格外小心!覆盖TalkBack的TTS行为是非常非常粗略的。从可访问性的角度来看,有许多边缘情况可能会使这种行为变得笨拙、笨拙和非常糟糕。只有当公告的样式是特定于应用程序和所需功能的行为时,才应使用此解决方案。否则,这个解决方案打破了WCAG 2.0关于与用户代理兼容的各种成功标准,从可访问性/可用性的角度来看,这通常是一个糟糕的想法!
在许多情况下,当我看到这样的问题时,我会犹豫是否提供答案,以免给开发人员提供他们不理解的工具。请不要在典型的应用程序中这样做,这是一个糟糕的想法。话虽如此,我相信这种特殊的情况需要它,而且在这种情况下,这是一个非常干净的解决方案。在创建活动时,执行以下操作:
findViewById(android.R.id.content).setAccessibilityDelegate(new View.AccessibilityDelegate() {
private TextToSpeech mTts = new TextToSpeech(MainActivity.this, new TextToSpeech.OnInitListener() {
@Override
public void onInit(int status) {
mTts.setLanguage(new Locale("es"));
//Probably other things you should do to ensure TTS is initialized before requesting it speaks something.
}
});
private boolean isSpanishView(View view) {
return true;
}
@Override
public boolean onRequestSendAccessibilityEvent(ViewGroup host, View child, AccessibilityEvent event) {
switch (event.getEventType()) {
case AccessibilityEvent.TYPE_ANNOUNCEMENT:
case AccessibilityEvent.TYPE_VIEW_ACCESSIBILITY_FOCUSED: {
if (isSpanishView(child)) {
String speakableText = null;
if (event.getText() != null) {
speakableText = event.getText().toString();
} else if (event.getContentDescription() != null) {
speakableText = event.getContentDescription().toString();
}
if (speakableText != null) {
mTts.speak(speakableText.toString(), TextToSpeech.QUEUE_ADD, null);
//Prevent the default propagation of this event, have have handled it.
return false;
}
}
}
default:
return super.onRequestSendAccessibilityEvent(host, child, event);
}
}
});基本上,我们在这里所说的是将一个可访问性委托附加到我们活动的根视图。看看所有弹出的可访问性事件。查看它是否是一个宣告某件事的事件。如果是,请检查它是否是包含西班牙语文本的视图。如果是,请允许我们的西班牙语TTS引擎通知它,而不是让事件传播。在所有其他情况下,让android做它自己的事情吧。
发布于 2017-07-10 18:45:19
谷歌宣布了一项更新,允许你指定想要朗读文本的语言。这里提供了一个带有链接的答案:https://stackoverflow.com/a/44461540/494879
https://stackoverflow.com/questions/44426853
复制相似问题