Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/222.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android talkback不读取对话框的内容_Android_Dialog_Talkback - Fatal编程技术网

Android talkback不读取对话框的内容

Android talkback不读取对话框的内容,android,dialog,talkback,Android,Dialog,Talkback,当用户使用下面的代码输入错误的用户名或密码时,我试图显示该对话框 private void showAlert(String title, String msg) { customDialog = new Dialog(LoginActivity.this, android.R.style.Theme_Dialog); customDialog.requestWindowFeature(Window.FEATURE_NO_TITLE); custo

当用户使用下面的代码输入错误的用户名或密码时,我试图显示该对话框

private void showAlert(String title, String msg) {
    customDialog = new Dialog(LoginActivity.this,
            android.R.style.Theme_Dialog);
    customDialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
    customDialog.setContentView(R.layout.custom_alert_dialog);

    tvTitle = (TextView) customDialog
            .findViewById(R.id.dialog_title);
    tvMsg = (TextView) customDialog
            .findViewById(R.id.dialog_message);
    btnNeutral = (Button) customDialog
            .findViewById(R.id.closeAlert);

    tvMsg.setText(msg);
    tvTitle.setText(title);

    tvMsg.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_FOCUSED);
    tvMsg.setFocusable(true);

    btnNeutral.setText("Close");
    btnNeutral.setVisibility(View.VISIBLE);
    btnNeutral.setOnClickListener(new OnClickListener() {

        public void onClick(View v) {
            customDialog.dismiss();
        }
    });
    customDialog.show();
    tvMsg.requestFocus();
}

代码运行良好,但我担心的是,当我尝试使用android对讲机时。它只读取对话框的标题。对讲需要读取对话框的内容(消息),而不是标题。有人能帮我吗?

首先,宣布一个新对话框的标题是非常标准的。否则,在可访问性方面可能会适得其反。对我来说,这听起来像是一个有动机做好事的人提出的可访问性要求,但这并不真正理解残疾用户的需求。随意地把焦点推来推去通常是不好的。让操作系统专注地做它想做的事情,这是辅助技术(对讲)用户将习惯的

这意味着您的代码存在两个主要问题。首先,当你说焦点时,你指的是可访问性焦点

tvMsg.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_FOCUSED);
tvMsg.setFocusable(true);
tvMsg.requestFocus();
所有这些行都是指键盘或输入焦点,对于
TextView
,它们都不是特别有意义的。这些仅对活动元素(如
按钮
编辑文本
框)有意义。如果你做对了,这行得通吗。但是,它也带来了一些尴尬的副作用,比如
TextView
被添加到选项卡排序中,这对于只使用键盘的用户来说很尴尬,因为TextView没有焦点突出显示,所以焦点导航消失了。您真正想要的是以下事件类型:

AccessibilityEvent.TYPE_VIEW_ACCESSIBILITY_FOCUSED
现在,关于第二点。在视图实际渲染之前,您正在执行所有这些操作。替换此行:

tvMsg.requestFocus();
tvMsg.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_ACCESSIBILITY_FOCUSED);
这一行:

tvMsg.requestFocus();
tvMsg.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_ACCESSIBILITY_FOCUSED);

删除上面提到的其他行,你应该是金色的。尽管如此,我的最终建议还是放弃所有这些,直接删除这三行,忘记这一点。让操作系统做它自己的事情吧

我已经按照上面给出的说明进行了操作,但是我还是遇到了同样的问题。你可能有比赛条件。在发送AccessibilityEvent行之前,请确保视图已呈现并位于视图层次结构中。如果不是,您将需要一个延迟/来找到确保呈现视图的正确回调。我已经等待了几秒钟使用Thread.sleep呈现视图,然后仅应用
tvmg.sendAccessibilityEvent(AccessibilityEvent.TYPE_view_ACCESSIBILITY_FOCUSED)代码。但是它仍然不起作用。+1为了深入了解
类型视图聚焦
类型视图聚焦
之间的区别,我遇到了同样的问题,似乎找不到一种方法来获得反馈以开始阅读字段。一个盲人用户不会知道对话框已经弹出