You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android多EditText选中位置检查及软键盘隐藏异常问题解决

解决Android多EditText软键盘隐藏异常问题

我来帮你搞定这个问题!你遇到的情况是因为hideSoftKeyboard方法需要针对当前拥有焦点的EditText来调用,你之前只固定传了第一个输入框,当焦点在第二个或第三个时,自然不会生效。下面给你两种靠谱的解决方案:

方法1:主动判断哪个EditText拥有焦点

你可以在点击取消按钮时,先检查三个EditText中哪个处于焦点状态,然后对它调用隐藏软键盘的方法:

btn_cancel.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        // 检查哪个EditText有焦点
        if (edt_category_name.hasFocus()) {
            hideSoftKeyboard(edt_category_name);
        } else if (edt_category_price.hasFocus()) {
            hideSoftKeyboard(edt_category_price);
        } else if (edt_category_qty.hasFocus()) {
            hideSoftKeyboard(edt_category_qty);
        }
        dialog.dismiss();
    }
});

方法2:通用方案(推荐)

不用逐个判断输入框,直接获取当前窗口中拥有焦点的视图,不管焦点在哪个输入框都能处理,代码更简洁:

btn_cancel.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        // 获取当前窗口的焦点视图
        View focusedView = getCurrentFocus();
        if (focusedView != null && focusedView instanceof EditText) {
            hideSoftKeyboard(focusedView);
        }
        dialog.dismiss();
    }
});

另外,也可以给你补一下标准的hideSoftKeyboard实现(如果你当前的方法存在逻辑漏洞的话),确保它能稳定工作:

private void hideSoftKeyboard(View view) {
    InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
    imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
}

这样修改后,不管光标在哪个EditText里,点击取消按钮时软键盘都能正常隐藏啦~

内容的提问来源于stack exchange,提问作者Steven Phyo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 03:36:26