【工具類】Android 最有效的隱藏軟鍵盤方法

戴維尼老爺爺發表於2017-03-27

原文發表於:blog.csdn.net/qq_27485935 , 大家沒事可以去逛逛 (ง •̀_•́)ง

前言

在平時的 App 開發中, 免不了會遇到需要開發者隱藏軟鍵盤的情況, 比如當在多個輸入框填入個人基本資訊, 最後有個儲存按鈕, 點選即可將個人基本資訊儲存, 這時就需要開發者編寫程式碼去隱藏軟鍵盤, 而不需要使用者自己去手動隱藏, 這樣大大提高 App 的使用者體驗。

網上大多數給的方法

public static void hideKeyboard() {
    InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
    imm.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS);
}複製程式碼

而試驗結果卻是...

當軟鍵盤顯示了, 呼叫上述方法確實可以隱藏。 但是當軟鍵盤已經隱藏了, 呼叫上述方法後又將重新顯示。

【工具類】Android 最有效的隱藏軟鍵盤方法

不過! 解決辦法還是有的

我在 StackOverflow 中逛了一圈, 最後試驗出兩個成功的方法, 如下:

public class SoftKeyboardUtil {

    /**
     * 隱藏軟鍵盤(只適用於Activity,不適用於Fragment)
     */
    public static void hideSoftKeyboard(Activity activity) {
        View view = activity.getCurrentFocus();
        if (view != null) {
            InputMethodManager inputMethodManager = (InputMethodManager) activity.getSystemService(Activity.INPUT_METHOD_SERVICE);
            inputMethodManager.hideSoftInputFromWindow(view.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
        }
    }

    /**
     * 隱藏軟鍵盤(可用於Activity,Fragment)
     */
    public static void hideSoftKeyboard(Context context, List<View> viewList) {
        if (viewList == null) return;

        InputMethodManager inputMethodManager = (InputMethodManager) context.getSystemService(Activity.INPUT_METHOD_SERVICE);

        for (View v : viewList) {
            inputMethodManager.hideSoftInputFromWindow(v.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
        }
    }
}複製程式碼

有人可能會問 SoftKeyboardUtil 第二個方法的 List<View> viewList 引數是什麼, viewList 中需要放的是當前介面所有觸發軟鍵盤彈出的控制元件。 比如一個登陸介面, 有一個賬號輸入框和一個密碼輸入框, 需要隱藏鍵盤的時候, 就將兩個輸入框物件放在 viewList 中, 作為引數傳到 hideSoftKeyboard 方法中即可。

原理待以後慢慢發掘......

相關文章