隐藏 SoftKeyboard

隐藏 Softkeyboard 是使用 EditText 时的基本要求默认情况下,软键盘只能通过按后退按钮关闭,因此大多数开发人员使用 InputMethodManager 强制 Android 隐藏调用 hideSoftInputFromWindow 的虚拟键盘并传入包含焦点视图的窗口的标记。执行以下操作的代码:

public void hideSoftKeyboard()    
{
        InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(Activity.INPUT_METHOD_SERVICE);
        inputMethodManager.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);    
}

代码是直接的,但是出现的另一个主要问题是当某些事件发生时需要调用 hide 函数。按下 EditText 以外的任何地方时需要隐藏软键盘时该怎么办?下面的代码给出了一个简洁的函数,需要在 onCreate() 方法中调用一次。

public void setupUI(View view) 
{
        String s = "inside";
        //Set up touch listener for non-text box views to hide keyboard.
        if (!(view instanceof EditText)) {

            view.setOnTouchListener(new View.OnTouchListener() {

                public boolean onTouch(View v, MotionEvent event) {
                    hideSoftKeyboard();
                    return false;
                }

            });
        }

        //If a layout container, iterate over children and seed recursion.
        if (view instanceof ViewGroup) {

            for (int i = 0; i < ((ViewGroup) view).getChildCount(); i++) {

                View innerView = ((ViewGroup) view).getChildAt(i);

                setupUI(innerView);
            }
        }    
}