2 baifaxiaoyao baifaxiaoyao 于 2012.10.17 10:41 提问

Android:当焦点在EditText上时自动显示软件键盘

我用AlertDialog显示了一个输入框。当我调用AlertDialog.show()时,对话框里的EditText自动获得焦点,但是软件键盘不会自动显示。
当对话框显示的时候我怎么做能够让软件键盘自动显示?(没有物理/硬件键盘)。和当我按下搜索按钮时调用全局搜索相似,软件键盘是自动显示的。

3个回答

liangchichexin
liangchichexin   2012.10.17 10:58
已采纳

你可以在 AlertDialog的EditTex中创建一个焦点监听,然后获得AlertDialog的窗口。这样你就可以通过调用setSoftInputMode来显示软件键盘。

final AlertDialog dialog= ...;
editText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
   @Override
   public void onFocusChange(View v, boolean hasFocus) {
       if (hasFocus) {
            dialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
       }
   }
});
mansuifengqi
mansuifengqi 我发现如果你无法获得焦点,你可以仔细检查一下你的XML!如果你发现有<requestFocus></requestFocus>这个tag,删除它。看起来这个tag可以让EditText获得焦点,但是因为EditText已经获得了焦点,所以你的监听器无法被释放。
5 年多之前 回复
niangzhi
niangzhi   2012.10.17 14:10

当创建了对话框之后你可以请求一个软件键盘

final AlertDialog dialog = ...; 
dialog.getWindow().setSoftInputMode (WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
gwl_2012
gwl_2012
11 个月之前 回复
gwl_2012
gwl_2012 简单好用
11 个月之前 回复
gouxiaojin
gouxiaojin   2012.10.17 15:12

我也遇到了同样的问题,用下边的代码解决的。我不知道它在一个有本身键盘的手机上会显示成什么样子。

final EditText textEdit = new EditText(this);

AlertDialog.Builder alert = new AlertDialog.Builder(this);
alert.setTitle("Enter text");
alert.setView(textEdit);

alert.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {
        String text = textEdit.getText().toString();
        finish();
    }
});

alert.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {
        finish();
    }
});

AlertDialog dialog = alert.create();
dialog.setOnShowListener(new OnShowListener() {

    @Override
    public void onShow(DialogInterface dialog) {
        InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
        imm.showSoftInput(textEdit, InputMethodManager.SHOW_IMPLICIT);
    }
});

dialog.show();
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!