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