gpt4 book ai didi

Android Talkback 公告本地化

转载 作者:太空狗 更新时间:2023-10-29 13:52:32 25 4
gpt4 key购买 nike

我有一个双语(英语 + 西类牙语)android 应用程序。我正在我的应用程序中实现可访问性,我希望 Talkback 以西类牙语阅读西类牙语单词,以英语阅读英语单词。英语和西类牙语单词将位于单独的 TextView 中。我的应用程序语言环境是英语,因此 Talkback + google 文本到语音引擎不会用西类牙语读取西类牙语单词,而是用英语读取它们,并且更经常地读出它们的字母(预期行为)。

是否有任何解决方法或 android 推荐的解决方案来实现相同的目的。

最终,我希望 Talkback 或自定义无障碍服务能够用英语读出英语单词,用西类牙语读出西类牙语单词。

最佳答案

免责声明:您必须格外小心使用此解决方案!覆盖 TalkBack 的 TTS 行为非常非常粗略。从可访问性的角度来看,有许多边缘情况可能会使这种行为变得笨拙、笨拙且非常糟糕。只有当公告的样式是特定于应用程序和所需功能的行为时,才应使用此解决方案。否则,此解决方案会破坏有关与用户代理兼容性的各种 WCAG 2.0 成功标准,并且从可访问性/可用性的角度来看通常是一个糟糕的想法!

在很多情况下,当我看到这样的问题时,我会犹豫是否提供答案,以免给开发人员提供他们不理解的工具。请不要在典型的应用程序中这样做,这是一个糟糕的主意。话虽如此,我相信这种特殊情况需要它,并且在这种情况下这是一个非常干净的解决方案。在创建 Activity 时执行以下操作:

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);
}
}
});

基本上我们在这里所说的是将可访问性委托(delegate)附加到我们 Activity 的 Root View 。查看所有弹出的辅助功能事件。检查它是否是宣布某事的事件。如果是,请检查它是否是包含西类牙语文本的 View 。如果是,请允许我们的西类牙语 TTS 引擎宣布它,而不是让通风口传播。在所有其他情况下让 android 做它的事情。

关于Android Talkback 公告本地化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44426853/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com