4

我已经通过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”等。

4

1 回答 1

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();
于 2016-08-09T22:10:03.540 回答