【问题标题】:TalkBack, not say "alert" when going to an alert dialog (or) alternative to alert dialogTalkBack,在进入警报对话框(或)替代警报对话框时不说“警报”
【发布时间】:2023-07-19 16:07:01
【问题描述】:

我在设计我的应用程序以使用 Talkback 访问时遇到了这个问题。

当 android 打开一个警告对话框时,它会读出单词“alert”,然后是对话框的其余部分。 我没有使用警报对话框来显示警报,有没有办法确保android直接读出对话框而不读出“警报”这个词。

另外,如果我只想显示一些从屏幕上弹出的数据,并且可以像解除警报对话框一样解除警报对话框,那么是否有替代警报对话框的方法?

【问题讨论】:

  • 您测试的是哪个版本的 TalkBack?
  • 我在 nexus 5 上测试它,运行最新版本的 TalkBack,3.5.2。
  • @JehoshaphAkshay 你有没有找到解决这个问题的方法?
  • @user1064249 不,我没有:(

标签: android dialog accessibility android-alertdialog talkback


【解决方案1】:

有点晚了,但是对于现在正在阅读本文的任何人,请像这样覆盖对话框的视图:

class NoAlertDialog @JvmOverloads constructor(context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0)
    : RelativeLayout(context, attrs, defStyleAttr) {

    init {
        inflate(context, R.layout.dialog, this)
    }

    override fun dispatchPopulateAccessibilityEvent(event: AccessibilityEvent?): Boolean {
        Log.e("Logging", "Event dispatched: " + event?.action)
        if (event?.action == AccessibilityEvent.CONTENT_CHANGE_TYPE_UNDEFINED) {
            return true
        }
        return super.dispatchPopulateAccessibilityEvent(event)
    }
}

如果不起作用,请尝试比较不同的AccessibilityEvent int,使用记录器中记录的那个。

【讨论】:

    【解决方案2】:

    基于this Google Groups post,您只需覆盖View.dispatchPopulateAccessibilityEvent 方法即可。

    例如:

    @Override
    public boolean dispatchPopulateAccessibilityEvent(AccessibilityEvent event) {
        //super.dispatchPopulateAccessibilityEvent(event);
        event.setBeforeText("My custom alert title text");
        event.getText().clear();
        return true;
    }
    

    【讨论】: