我已经通过 Android TalkBack 检查了所有默认的 Toast 消息。 默认的 Android TalkBack 行为是它读取 Toast 中的所有内容(不间断)。有什么办法可以根据我的需要自定义它。例如:
Toast.makeText(getApplicationContext(), "Hello world! Welcome to Android. This is Stackoverflow.", Toast.LENGTH_SHORT).show();
当 Toast 出现时,它会自动显示“Hello world!欢迎使用 Android。这里是 Stackoverflow。”但我想控制它,让它只显示“Hello world”或“Welcome to Android”或“This is Stackoverflow”等。
最佳答案
我想不出这样做的理由 - 通常,无论用户使用信息的方式如何,您都希望在提供给用户的信息之间保持某种对等。
如果您只是在寻找 TalkBack 来大声朗读文本,也许您可以直接使用 View.announceForAccessibility
API。也就是说……
是的,通过语音反馈无障碍服务大声朗读的内容可能与呈现的内容不同。
Toast toast = Toast.makeText(this, "visible text", Toast.LENGTH_SHORT);
View.AccessibilityDelegate delegate = new View.AccessibilityDelegate() {
@Override
public void onPopulateAccessibilityEvent(View host, AccessibilityEvent event) {
super.onPopulateAccessibilityEvent(host, event);
event.setContentDescription("audible text");
}
};
((ViewGroup) toast.getView()).getChildAt(0).setAccessibilityDelegate(delegate);
toast.show();
请注意获取对 TextView 的引用的 super hacky 方法。这很危险,因为它可能会破坏不同的 Android 实现。
您可以直接在 Toast 上设置自己的 View :
Toast toast = new Toast(this);
TextView messageView = new TextView(this);
messageView.setText("visible text");
View.AccessibilityDelegate delegate = new View.AccessibilityDelegate() {
@Override
public void onPopulateAccessibilityEvent(View host, AccessibilityEvent event) {
super.onPopulateAccessibilityEvent(host, event);
event.setContentDescription("audible text");
}
};
messageView.setAccessibilityDelegate(delegate);
toast.setView(messageView);
toast.show();
关于android - 在 Toast 中自定义 Android 对讲,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32324537/