gpt4 book ai didi

Android对讲不读取对话框内容

转载 作者:行者123 更新时间:2023-12-02 21:19:08 27 4
gpt4 key购买 nike

我尝试使用以下代码在用户提供错误的用户名或密码时显示对话框。

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 Talkback 时。它仅读取对话框的标题。对讲需要读取对话框的内容(消息)而不是标题。谁能帮我做到这一点?

最佳答案

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

这表示您的代码存在两个首要问题。首先,当您说焦点时,您指的是可访问性焦点。

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

所有这些行都指的是键盘或输入焦点,这些对于 TextView 来说都没有特别的意义。这些仅对诸如 ButtonsEditText 框之类的 Activity 元素有意义。如果你做得正确的话,这会起作用吗?是的。但是,它带来了尴尬的副作用,例如将 TextView 添加到 Tab 排序中,这对于仅使用键盘的用户来说很尴尬,因为 TextView 没有焦点突出显示,因此焦点导航消失了。您真正想要的是以下事件类型:

AccessibilityEvent.TYPE_VIEW_ACCESSIBILITY_FOCUSED

现在来说第二点。您将在 View 实际呈现之前完成所有这些操作。替换这一行:

tvMsg.requestFocus();

用这一行:

tvMsg.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_ACCESSIBILITY_FOCUSED);

删除上面提到的其他行,你应该是金色的。不过,我的最终建议还是放弃所有这些,彻底删除这三行,然后忘记这一点。让操作系统做它的事情!

关于Android对讲不读取对话框内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46545760/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com