【问题标题】:How to bring the cursor to EditText and bring up the keyboard automatically on AlertDialog popup如何将光标带到 EditText 并在 AlertDialog 弹出窗口中自动调出键盘
【发布时间】:2018-10-18 05:41:36
【问题描述】:

我正在尝试制作一个待办事项应用程序。您单击一个按钮会弹出一个弹出窗口,您可以在其中输入文本,然后单击添加按钮将其添加到列表中。我想让键盘在适当的时候出现:

1) 当用户点击按钮时,他应该能够输入文本而无需点击edittext字段。

2) 用户点击添加后,键盘应该会消失,而不是在用户回击之前不会消失。

我知道这个问题已经被问过很多次了,但解决方案似乎对我不起作用。代码如下:

 button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            final EditText taskEditText = new EditText(MainActivity.this);
            AlertDialog dialog = new AlertDialog.Builder(MainActivity.this)
                    .setTitle("Add a new task")
                    .setMessage("What do you want to do next?")
                    .setView(taskEditText)
                    .setNegativeButton("Add", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            taskEditText.requestFocus();
                            InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
                            imm.showSoftInput(taskEditText, InputMethodManager.SHOW_IMPLICIT);
                            getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
                            String task = String.valueOf(taskEditText.getText());
                            SQLiteDatabase db = mHelper.getWritableDatabase();
                            ContentValues values = new ContentValues();
                            values.put(TaskContract.TaskEntry.COL_TASK_TITLE, task);
                            db.insertWithOnConflict(TaskContract.TaskEntry.TABLE,
                                    null,
                                    values,
                                    SQLiteDatabase.CONFLICT_REPLACE);
                            db.close();
                            updateUI();
                        }
                    })
                    .setPositiveButton("Cancel", null)
                    .create();
            dialog.show();
        }
    });
    updateUI();
}

这个问题之前有点不同,我得到的回答对我不起作用。

【问题讨论】:

    标签: android android-softkeyboard


    【解决方案1】:

    您可以通过调用teskEditText.requestFocus() 将焦点分配给EditText。如果这没有调出键盘,您还可以添加行getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);

    额外问题:
    如果您想要一个EditText,文本下方没有线条,您可以添加背景。

    例如,我想在我的EditText 上使用没有下划线的白色背景,所以我在布局 XML 文件中设置了android:background="#ffffff"。这也可以使用taskEditText.setBackgroundColor(); 以编程方式完成

    【讨论】:

    • 我知道这是一个非常幼稚的问题,但我应该把 taskEditText.requestFocus 放在哪里呢?我对此很陌生。我在网上搜索了一下,我有几个地方想要改变焦点。例如,在附加问题中,如果我使用 EditText 并单击我创建的项目,闪烁的光标就不会消失!如果我单击屏幕上的其他任何位置,我希望它消失。
    【解决方案2】:
    final EditText taskEditText = new EditText(MainActivity.this);
    InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
    imm.showSoftInput(taskEditText, InputMethodManager.SHOW_IMPLICIT);
    

    尝试强制软键盘在 EditText 上生成?

    【讨论】:

      【解决方案3】:

      好的,这是由 r/androiddev 上的用户回答的,这是唯一对我有用的方法:

       public void showKeyboard(EditText editText) {
          keyboardShown = true;
          editText.requestFocus();
          editText.postDelayed(new Runnable() {
              @Override
              public void run() {
                  InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
                  imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0);
              }
          }, 100);
      }
      
      public void hideKeyboard() {
          if (keyboardShown) {
              InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
              imm.toggleSoftInput(InputMethodManager.HIDE_IMPLICIT_ONLY, 0);
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2018-03-08
        • 1970-01-01
        • 1970-01-01
        • 2013-05-31
        • 1970-01-01
        • 2015-07-24
        • 1970-01-01
        • 2011-06-15
        • 2015-12-30
        相关资源
        最近更新 更多