1. 程式人生 > >解決Android dialog中含有edittext, dismiss時軟鍵盤不會自動消失的問題

解決Android dialog中含有edittext, dismiss時軟鍵盤不會自動消失的問題

解決方案:

重寫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中的游標顏色不同,一個是粉色,一個是綠色。