隱藏 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);
            }
        }    
}