2012-07-24 162 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