有输入框 EditText 的界面,如何处理软键盘的弹出/收起
现象
- 如果界面上有 EditText 控件,则它会自动获取焦点并使软键盘弹出
- 与界面上其他控件进行交互(触摸、点击)时,软键盘不会自动隐藏
解决方案
1.监听 EditText 的焦点变化,如果丢失焦点,则自动隐藏软键盘
2.为界面上其他控件设置属性:可以获取焦点,这样在你与其他控件交互时,它们就会获取焦点,触发 EditText 焦点变动监听器,隐藏软键盘
代码实现:
1.监听 EditText 焦点变化
editText.setOnFocusChangeListener(new OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
//当EditText失去焦点时,隐藏软键盘
if (!hasFocus) {
closeKeyBoard
}
}
});
2.设置界面上其他控件可以获得焦点(XML)
android:focusable="true"
android:focusableInTouchMode="true"
3.弹出软键盘
/**
* 弹出软键盘
*/
private void showKeyBoard() {
InputMethodManager imm = (InputMethodManager) MyApplication.getInstances().getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(editText, InputMethodManager.SHOW_IMPLICIT);
}
4.收起软键盘
/**
* 收起软键盘
*/
public static void closeKeyBoard() {
InputMethodManager inputMethodManager = (InputMethodManager) MyApplication.getInstances().getSystemService(Context.INPUT_METHOD_SERVICE);
inputMethodManager.hideSoftInputFromWindow(editText.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
}