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为了深入了解类型视图聚焦
和类型视图聚焦
之间的区别,我遇到了同样的问题,似乎找不到一种方法来获得反馈以开始阅读字段。一个盲人用户不会知道对话框已经弹出