首页 > 解决方案 > 如何将光标带到 EditText 并在 AlertDialog 弹出窗口中自动调出键盘

问题描述

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

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

这个问题早些时候有点不同,我得到的回答对我不起作用。

标签: androidandroid-softkeyboard

解决方案


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

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

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


推荐阅读