我想不出这样做的理由——通常,您希望在提供给用户的信息之间保持某种平等,而不管他们使用信息的方式如何。
如果您只是在寻找 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();