Как подвести курсор к EditText и автоматически вызвать клавиатуру во всплывающем окне AlertDialog

Я пытаюсь сделать приложение To-Do. Вы нажимаете кнопку, которая вызывает всплывающее окно, где вы можете ввести текст, и нажимаете кнопку добавления, чтобы добавить его в список. Я бы хотел, чтобы клавиатура появлялась в подходящее время:

1) Когда пользователь нажимает кнопку, он должен иметь возможность вводить текст, не нажимая на поле редактирования текста.

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

Раньше этот вопрос был немного другим, и ответы, которые я получил, меня не устроили.

0
0
233
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Вы можете назначить фокус на EditText, позвонив в teskEditText.requestFocus(). Если это не вызовет клавиатуру, вы также можете добавить строку getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);.

Бонусный вопрос:
Если вам нужен EditText без строки под текстом, вы можете добавить фон.

Например, мне нужен белый фон на моем EditText без подчеркивания, поэтому я установил android:background = "#ffffff" в XML-файле макета. Это также можно сделать программно с помощью taskEditText.setBackgroundColor();.

Я знаю, что это крайне наивный вопрос, но где именно мне поставить taskEditText.requestFocus? Я новичок в этом. Я немного поискал в Интернете, и у меня есть несколько мест, где я хочу сменить фокус. Например, в вопросе о бонусе, если я использую EditText и нажимаю на созданный мной элемент, мигающий курсор просто не исчезнет! Я хочу, чтобы он исчез, если я щелкну где-нибудь еще на экране.

harsh99 10.08.2018 20:27
final EditText taskEditText = new EditText(MainActivity.this);
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(taskEditText, InputMethodManager.SHOW_IMPLICIT);

Может быть, попробуйте заставить вашу мягкую клавиатуру появляться на вашем EditText?

Ответ принят как подходящий

Хорошо, на это ответил пользователь 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);
    }
}

Другие вопросы по теме