有输入框 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);
}