【问题标题】:Android - Programmatically opening the keyboard/requesting focus on an EditText inside an AlertDialogAndroid - 以编程方式在 AlertDialog 内的 EditText 上打开键盘/请求焦点
【发布时间】:2016-02-18 21:08:03
【问题描述】:

我有一个 Android 应用程序,其中一部分显示了 AlertDialog。在那个 AlertDialog 中,我有一个 EditText,它预先填充了 prefs 中的值,用户可以更改它。

代码工作得很好,但是,为了更直观的用户体验,我想要做的是,当弹出警报对话框时,首选项中的预填充值已经突出显示并且键盘准备好了。

到目前为止,我已经很好地完成了输入突出显示,但我无法让键盘弹出或以编程方式使请求焦点工作。这是我的代码:

private void showPrefixChangerDialog() {
    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setTitle("Set Pipe Prefix");

    final EditText input = new EditText(this);
    input.setInputType(InputType.TYPE_CLASS_NUMBER);
    input.setGravity(Gravity.CENTER_HORIZONTAL);
    input.setText(pipePrefix);
    input.setSelection(0, 2);
    input.performClick();
    input.requestFocus();
    InputFilter[] filters = new InputFilter[1];
    filters[0] = new InputFilter.LengthFilter(2);
    input.setFilters(filters);

    InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
    imm.showSoftInput(input, InputMethodManager.SHOW_IMPLICIT);


    builder.setView(input);

    builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            String finalInput = input.getText().toString();
            saveInputToPrefs(finalInput);
            tv.setText("Pipe Prefix is " + finalInput);
        }
    });
    builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            dialog.cancel();
        }
    });
    builder.show();
}

如您所见,我尝试使用performClick()requestFocus()InputManager,但都无济于事。

【问题讨论】:

    标签: android


    【解决方案1】:

    找到解决方案from this thread

        AlertDialog dialog = builder.create();
        dialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE);
    
        dialog.show();
    

    我需要更好地谷歌

    【讨论】:

      【解决方案2】:

      试试这个(“输入”是你的 EditText):

      InputMethodManager in = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
      in.showSoftInput(input, InputMethodManager.SHOW_IMPLICIT);
      

      【讨论】:

      • 呃,我的代码中已经有了。请阅读我的问题中的代码。
      • 你必须在 "builder.show()" 之后调用它,因为 editText 还不可见
      • 放在builder.show()之后还是不行
      猜你喜欢
      • 2012-10-11
      • 2012-03-04
      • 1970-01-01
      • 2020-09-30
      • 2017-02-14
      • 2014-10-02
      • 2021-11-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多