如何将光标移至EditText并在AlertDialog弹出窗口上自动弹出键盘

时间:2018-08-10 17:44:47

标签: android android-softkeyboard

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

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();
}

这个问题之前有点不同,我得到的答复对我没有用。

3 个答案:

答案 0 :(得分:1)

您可以通过调用EditTextteskEditText.requestFocus()分配焦点。如果仍然无法启动键盘,则还可以添加行getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);

奖金问题:
如果您希望EditText的文本下方没有行,则可以添加背景。

例如,我希望EditText上的白色背景没有下划线,因此我在布局XML文件中设置了android:background="#ffffff"。也可以使用taskEditText.setBackgroundColor();

以编程方式完成此操作

答案 1 :(得分:0)

rails task --trace

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

答案 2 :(得分:0)

好的,这是由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);
    }
}