原文發(fā)表于:http://blog.csdn.net/qq_27485935 悦污, 大家沒事可以去逛逛 (? ??_??)?
前言
在平時(shí)的 App 開發(fā)中, 免不了會(huì)遇到需要開發(fā)者隱藏軟鍵盤的情況米死, 比如當(dāng)在多個(gè)輸入框填入個(gè)人基本信息砖茸, 最后有個(gè)保存按鈕, 點(diǎn)擊即可將個(gè)人基本信息保存痢法, 這時(shí)就需要開發(fā)者編寫代碼去隱藏軟鍵盤, 而不需要用戶自己去手動(dòng)隱藏窝趣, 這樣大大提高 App 的用戶體驗(yàn)疯暑。
網(wǎng)上大多數(shù)給的方法
public static void hideKeyboard() {
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS);
}
而試驗(yàn)結(jié)果卻是
當(dāng)軟鍵盤顯示了, 調(diào)用上述方法確實(shí)可以隱藏哑舒。 但是當(dāng)軟鍵盤已經(jīng)隱藏了妇拯, 調(diào)用上述方法后又將重新顯示。
不過洗鸵! 解決辦法還是有的
我在 StackOverflow 中逛了一圈越锈, 最后試驗(yàn)出兩個(gè)成功的方法, 如下:
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甘凭,F(xiàn)ragment)
*/
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);
}
}
}
有人可能會(huì)問 SoftKeyboardUtil 第二個(gè)方法的 List<View> viewList
參數(shù)是什么, viewList 中需要放的是當(dāng)前界面所有觸發(fā)軟鍵盤彈出的控件火邓。 比如一個(gè)登陸界面丹弱, 有一個(gè)賬號(hào)輸入框和一個(gè)密碼輸入框, 需要隱藏鍵盤的時(shí)候铲咨, 就將兩個(gè)輸入框?qū)ο蠓旁?viewList 中躲胳, 作為參數(shù)傳到 hideSoftKeyboard 方法中即可。
原理待以后慢慢發(fā)掘......