原文發表於: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);
}複製程式碼
而試驗結果卻是...
當軟鍵盤顯示了, 呼叫上述方法確實可以隱藏。 但是當軟鍵盤已經隱藏了, 呼叫上述方法後又將重新顯示。
不過! 解決辦法還是有的
我在 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 方法中即可。
原理待以後慢慢發掘......