我已通过 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”等。
答案 0 :(得分:3)
我无法想到这样做的理由 - 通常,您希望在为用户提供的信息之间存在某种奇偶性,无论他们使用这些信息的方式如何。
如果您只是在寻找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引用的超级hacky方法。这很危险,因为它可能会破坏Android的不同实现。
您可以直接在Toast上设置自己的视图:
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();