在AlertTeog内部,当EditText处于焦点时,Android键盘不显示

时间:2014-08-12 19:47:54

标签: android dialog android-edittext alertdialog

很多人似乎都有这个问题,但他们的解决方案都没有帮助我。

基本上我创建了一个自定义警告对话框,并设置了一个linearlayout作为它的视图。

如果我在显示对话框之前向其添加了editText,一切正常,键盘就会显示出来。

但是,如果我在对话框启动时将editText添加到线性布局,即使我点击编辑文本,即使它之前没有焦点,键盘也不会显示。< / p>

我试过

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);

但是没有键盘出现过。

我也尝试过:

InputMethodManager imm = (InputMethodManager) getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
if(imm!=null)
{
    imm.toggleSoftInput(0, InputMethodManager.SHOW_IMPLICIT);
}

来自alertdialog,但显示的键盘位于对话框后面,因此无法使用。

我只是不明白问题是什么,你们中的任何人都知道解决方案吗?

4 个答案:

答案 0 :(得分:1)

之前我遇到了同样的问题,并通过将其添加到我的对话框类

来解决
public Dialog onCreateDialog(Bundle savedInstanceState) {
    Dialog dialog = super.onCreateDialog(savedInstanceState);
    dialog.getWindow().setSoftInputMode (WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
    return dialog;

}

您之前说过您使用过此代码,但没有提及您使用过的代码。 试一试,让我知道

并在点击关闭或完成后隐藏它以使用此代码:

final InputMethodManager imm = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(getView().getWindowToken(), 0);

答案 1 :(得分:1)

基本上有一个警告对话框是我的问题。它没有让我正确设置内容视图,使用setView(视图)是我的垮台。

通过将我的客户对话框类扩展到对话框而不是警告对话框并使用setContentView()而不是setView()(在警告对话框中可用),我不再遇到软键盘问题。

答案 2 :(得分:0)

首先尝试:

 imm.showSoftInput(textView, InputMethodManager.SHOW_IMPLICIT);

如果不起作用,请尝试:

Handler handler=new Handler();
Runnable r=new Runnable(){
        public void run() {
               imm.showSoftInput(textView, InputMethodManager.SHOW_IMPLICIT);
        }
}; 
handler.postDelayed(r, 100);

第二种方法将延迟打开键盘100毫秒,以防视图仍然设置等

答案 3 :(得分:0)

问题似乎在于,由于您最初隐藏输入文本的位置(或嵌套或其他内容),因此AlertDialog会自动设置标记WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IMWindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,以便不会出现问题。 t触发软输入显示。

解决问题的方法如下:

(...)
// Create the dialog and show it
Dialog dialog = builder.create()
dialog.show();

// After show, clear the flags and set the soft input mode
dialog.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE|WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM);
dialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);