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
相关产品推荐
相关产品推荐

