解決Android dialog中含有edittext, dismiss時軟鍵盤不會自動消失的問題
阿新 • • 發佈:2019-01-07
解決方案:
重寫dialog類中dismiss方法:
public class CustomDialog extends Dialog { protected CustomDialog(Context context) { super(context); } protected CustomDialog(Context context, boolean cancelable, OnCancelListener cancelListener) { super(context, cancelable, cancelListener); } protected CustomDialog(Context context, int themeResId) { super(context, themeResId); } @Override public void dismiss() { View view = getCurrentFocus(); if(view instanceof TextView){ InputMethodManager mInputMethodManager = (InputMethodManager) getContext().getSystemService(Context.INPUT_METHOD_SERVICE); mInputMethodManager.hideSoftInputFromWindow(view.getWindowToken(), InputMethodManager.RESULT_UNCHANGED_SHOWN); } super.dismiss(); } }
解決問題時,遇到很多問題:
1.首先嚐試了在OndismissListener()中加入隱藏軟鍵盤的程式碼,沒有效果。因為在onDismiss()方法中已經獲取不到edittext了,所以沒有效果
2.然後在listener中替換了
InputMethodManager inputMgr = (InputMethodManager) context
.getSystemService(Context.INPUT_METHOD_SERVICE);
inputMgr.toggleSoftInput(InputMethodManager.HIDE_NOT_ALWAYS, 0);
的程式碼,很變態,不管當時情況下有沒有鍵盤在介面上,他都會更新一次鍵盤的狀態,比如現在沒有鍵盤,進行操作後會彈出鍵盤。
3,然後嘗試了新增判斷介面上有沒有鍵盤的方法isactive(),結合第二步。無果,和上一種方法效果一樣。可能是隻要EditText中顯示游標isActive()就會返回true。
4,最終使用了重寫dismiss方法完美解決。
還有一個問題沒有理清楚:
我的APP有兩個Activity,在一個activity中沒有新增任何方法,鍵盤的顯隱沒有任何問題,而另一個activity就出現瞭如上問題;還有兩個頁面中dialog中的EditText中的游標顏色不同,一個是粉色,一個是綠色。