Я пытаюсь сделать приложение 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();
}
Раньше этот вопрос был немного другим, и ответы, которые я получил, меня не устроили.
Вы можете назначить фокус на EditText, позвонив в teskEditText.requestFocus(). Если это не вызовет клавиатуру, вы также можете добавить строку getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);.
Бонусный вопрос:
Если вам нужен EditText без строки под текстом, вы можете добавить фон.
Например, мне нужен белый фон на моем EditText без подчеркивания, поэтому я установил android:background = "#ffffff" в XML-файле макета. Это также можно сделать программно с помощью taskEditText.setBackgroundColor();.
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);
}
}
Я знаю, что это крайне наивный вопрос, но где именно мне поставить taskEditText.requestFocus? Я новичок в этом. Я немного поискал в Интернете, и у меня есть несколько мест, где я хочу сменить фокус. Например, в вопросе о бонусе, если я использую EditText и нажимаю на созданный мной элемент, мигающий курсор просто не исчезнет! Я хочу, чтобы он исчез, если я щелкну где-нибудь еще на экране.