【问题标题】:Android how to set ImageButton accessibility focusAndroid如何设置ImageButton可访问性焦点
【发布时间】:2018-11-04 12:15:26
【问题描述】:

我尝试在我的应用上应用关于对讲的辅助功能。

当用户选择EditText 时,我想将焦点更改为ImageButton(自定义键盘布局)。

这是我的代码摘要。

edittext.setAccessibilityDelegate(new View.AccessibilityDelegate() {
    @Override
    public void sendAccessibilityEvent(View host, int eventType) {
        if (eventType == AccessibilityEvent.TYPE_VIEW_FOCUSED || eventType == AccessibilityEvent.TYPE_VIEW_CLICKED) {
            btn.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_FOCUSED);
        }
    }   
});

我设置了关于TYPE_VIEW_CLICKEDTYPE_VIEW_FOCUSED 的条件,因为当用户双击EditText 时,可能已经聚焦了一个状态。

但是,如果 eventType 为TYPE_VIEW_CLICKED,则按钮不仅可访问焦点,还会引发按钮点击事件。

我只想设置焦点。

我该如何解决这个问题?

【问题讨论】:

    标签: android accessibility talkback


    【解决方案1】:

    选项 1onCreate()

    editText.requestFocus();
    

    选项 2 - 选项 1 的扩展

    if(editText.requestFocus()) {
    getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
    }
    

    选项 3 - 如果选项 1 和 2 都不起作用

    editText.requestFocus();
    InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
    imm.showSoftInput(editText, InputMethodManager.SHOW_IMPLICIT);
    

    【讨论】:

    • 我不需要使用 requestFocus()。 EditText 的焦点将来自用户的双击手势。我只想将可访问性焦点更改为没有按钮单击事件的按钮。
    • 我使用代码技巧解决了这个问题。如果EditText 收到TYPE_VIEW_CLICKED 事件,则重新发送TYPE_VIEW_FOCUSEDsendAccessibilittyEvent() 方法将被递归调用。然后将事件发送到ImageButton。我不知道为什么剂量ImageButton 工作CLICK
    • @JinEun.Jeong 你能和我分享你的代码解决方案吗?也许只是通过电子邮件从您的项目中获取的一个 sn-p
    • 对不起。我对这个问题有误。还是有问题。但我找到了单击按钮的原因。首先,这是 Galaxy Note 4 (Android 6.0) 上的设备问题。其次,当你触摸点击时,onClick事件发生在触摸事件ACTION_UP之前。所以我处理了if (eventType == TYPE_VIEW_CLICKED` ...). UI focus moved already. so Button`接收触摸事件DOWNUP
    • @JinEun.Jeong 감사합니다 努力向我更新您的解决方案!我可以成为你的,这样我们就可以交流我们的编程经验吗?如果我听起来很荒谬,我深表歉意。