2012-07-24 63 views
29

我想在AlertDialog關閉後隱藏軟鍵盤,但它仍然可見。這裏是我的代碼:對話框關閉後隱藏軟鍵盤

alert = new AlertDialog.Builder(MyActivity.this); 
imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); 

alert.setOnDismissListener(new DialogInterface.OnDismissListener() { 

    @Override 
    public void onDismiss(DialogInterface dialog) { 
     imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0); 
    } 
}); 

回答

7
+0

這兩種方法都是使用的EditText觀點,但我不是。我沒有EditText。這是我的SettingsActivity中的對話框。當它關閉時,鍵盤顯示:( – 2012-07-25 12:14:47

+1

如果你的鍵盤彈出一個對話框,這意味着你的對話框中必須有一個EditText,所以你可以通過傳遞EditText的window-token來編寫上面的代碼,然後調用dialog.dismiss () – AndroidGuy 2012-07-26 13:01:18

+0

或者如果它不是上述情況..意味着如果Edittext不在你的對話框中,你需要檢查它彈出哪個EditText並在顯示對話框之前將它隱藏起來,如果這樣做也不起作用,請將你的代碼發送出去 – AndroidGuy 2012-07-26 13:40:27

3

我用這個方法:

IBinder token = searchTextEntry.getWindowToken(); 
((InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE)).hideSoftInputFromWindow(token, 0); 

其中searchTextEntry是我的EditText參考的名稱。

+0

我沒有EditText,它是我設置活動中的對話框,當它關閉時,鍵盤顯示:( – 2012-07-25 12:12:20

14

我遇到了同樣的問題。通過這樣做來解決它。它不需要任何參考:

imm.hideSoftInputFromWindow(getWindow().getDecorView() 
       .getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS); 
+2

+1,表示正確答案。 – BBdev 2013-07-03 11:56:35

+0

此試圖從DialogFragment – Kammaar 2016-09-20 12:54:02

+0

隱藏當工作正確的,但它暫時留下一道白影,如何防止白色的影子? – 2018-02-14 11:09:24

61

清單XML這個答案解決了隱藏軟鍵盤從對話框的問題

機器人:windowSoftInputMode = 「stateAlwaysHidden」

它會自動隱藏軟鍵盤上辭退對話框

+2

簡單而有效的...謝謝! – 2015-03-09 09:46:12

+2

這應該是公認的答案!這是一個不好的做法,覆蓋在AndroidManifest.xml – Renjith 2015-07-15 14:08:36

+0

@Renjith聲明的屬性,你可以請詳細說明爲什麼它的壞 – Rajeshwar 2015-08-27 09:45:29

0

所有這些建議的使用InputMethodManager有點模糊 - 哪兒來稱呼它,
,他們不至少對我來說工作。
是的,鍵盤消失,但然後應用程序崩潰!?
主要問題是當對話框消失的同時,鍵盤的隱藏發生。

爲了避免它dialog.dismiss()應該view.postDelayed()imm.hideSoftInputFromWindow()後打來電話,在我來說,我設置延遲150

5

我關閉一個警告對話框時,也有類似的問題。這似乎爲我做了詭計。

裏面你DialogFragment

public static void closeKB(final View view) 
{ 
    caller.postDelayed(new Runnable() { 
     @Override 
     public void run() { 
      InputMethodManager imm = (InputMethodManager) view.getContext().getSystemService(Context.INPUT_METHOD_SERVICE); 
      imm.hideSoftInputFromWindow(view.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS); 
     } 
    }, 1); 
} 

@Override 
public void onDismiss(DialogInterface dialog) 
{ 
    super.onDismiss(dialog); 
      View view = getActivity().getCurrentFocus(); 
    if (view != null) 
    { 
     closeKB(view); 
    } 
} 
+0

這是唯一爲我工作的事!謝謝! – 2016-11-09 06:04:14