使用 Talkback 宣布一个 TextView

Announce a TextView with Talkback

我正在开发一个使用 google 地图 api 的应用程序,它应该供看不见的人使用,因此辅助功能很重要。

如何制作一个已经作为文本和 contentDescription 的 TextView,以便在 activity 启动时立即公布,而无需用户触摸它?

我的问题的另一点是我有一条公交路线,我想在某些点得到通知并附上说明,我的问题是对讲功能正常,但如果我触摸 googlemap 或 activity 中的任何其他地方,对讲停止说出描述。 (此描述显示在 Toast 中)

您在第一点中概述的关于在 activity 星级后立即阅读文本的内容是不受欢迎的行为。让 TalkBack 用户浏览您的应用以查找此信息。如果您必须 post 公告,您正在寻找的是辅助功能公告事件,它允许您向辅助技术层发送任意文本公告。

if (AccessibilityManager.getInstance(context).isEnabled()) {
    AccessibilityEvent event = AccessibilityEvent.obtain(
                AccessibilityEvent.TYPE_ANNOUNCEMENT);
    onInitializeAccessibilityEvent(event);
    event.getText().add("some text");
    event.setContentDescription(null);
    yourContentView.requestSendAccessibilityEvent(this, event);
}

您在第二点中概述的是期望的行为。想象一下,如果 TalkBack 用户不能打断各种通知,如果他们不小心连续聚焦了几段文字,他们要等多久才能听到按钮之类的简单名称?那将是一个非常令人沮丧的用户体验。

同上答案,最新代码更新:

private void sendAccessibiltyEvent(@NonNull String message) {
    AccessibilityManager accessibilityManager = (AccessibilityManager)requireActivity().getApplicationContext().getSystemService(Context.ACCESSIBILITY_SERVICE);
    if (accessibilityManager.isEnabled()) {
        AccessibilityEvent event = AccessibilityEvent.obtain(AccessibilityEvent.TYPE_ANNOUNCEMENT);
        event.getText().add(message);
        accessibilityManager.sendAccessibilityEvent(event);
    }
}