Показать мягкую клавиатуру для диалога
Я показываю диалог с видом edittext. Тем не менее, программная клавиатура откроется, только если пользователь нажимает на редактирование. Поэтому я попытался вызвать InputMethodManager со следующим кодом.
InputMethodManager imm =
(InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(dialogField,0);
Диалоговое окно - это поле ввода. Однако, когда я должен это делать? Я попробовал его в методе onStart() диалога, но ничего не происходит. Я также попробовал запросить фокус для dialogField раньше, но это ничего не меняет.
Я также пробовал этот код
dialogField.setOnFocusChangeListener(new View.OnFocusChangeListener()
{
public void onFocusChange (View v, boolean hasFocus)
{
if (hasFocus)
{
Main.log("here");
dialogInput.getWindow().setSoftInputMode(
WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
/*
InputMethodManager mgr =
(InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
mgr.showSoftInput(dialogField,0);
*/
}
}
});
в обеих версиях. Но никакая мягкая клавиатура не хотела бы появляться. Main.log - это всего лишь журнал, который показывает мне, что функция фактически вызвана. И да, это называется.
Я могу получить клавиатуру с символом SHOW_FORCED перед открытием диалогового окна. Но тогда он не будет закрываться при выходе. И я могу сделать это только до того, как я покажу диалог. Внутри любых обратных вызовов это тоже не работает.
Ответы
Ответ 1
Удивительный вопрос, я тоже пытался это сделать и нашел решение.
С помощью класса построителя диалогового окна AlertDialog.Builder
вам нужно будет вызвать диалоговое окно следующим образом:
AlertDialog.Builder builder = new AlertDialog.Builder();
AlertDialog dialog;
builder.set...
dialog = builder.create();
dialog.getWindow().setSoftInputMode(LayoutParams.SOFT_INPUT_STATE_VISIBLE);
dialog.show();
Это сработало для меня.
Примечание: вы должны import android.view.WindowManager.LayoutParams;
для постоянного значения.
Ответ 2
Попробуйте это
InputMethodManager imm = (InputMethodManager)getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(edttxt.getWindowToken(), 0);
Для закрытия
InputMethodManager imm = (InputMethodManager)getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(edttxt.getWindowToken(), 0);
Ответ 3
Это кажется невозможным.
Итак, я создал новую активность вместо диалога и разрешил пользователю редактировать ее. Обратите внимание, что в действиях вы можете установить режим клавиатуры в файле манифеста. Я установил его, чтобы показать, когда действие открывается.
Также обратите внимание, что тестирование эмулятора с помощью жестких клавиш не откроет клавиатуру для SHOW_IMPLICIT или флага 0.