showSoftInput не работает после смены ориентации


У меня есть фрагмент с одним редактируемым текстом, который требует, чтобы мягкая клавиатура оставалась постоянно открытой. Клавиатура скрывается при повороте экрана. Я вызываю showSoftInput в OnActivityCreated, который выполняется после вращения, но он не показывает клавиатуру.

InputMethodManager imm = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(edit, 0);

Примечание: я не хочу использовать toggleSoftInput. Я пробовал это, но в некоторых случаях это приводит к закрытию клавиатуры. И нет никакого способа запросить android, чтобы определить, есть ли клавиатура уже открывать.

2 6

2 ответа:

Похоже, что showSoftInput очень перегружен фрагментами.

Сначала попробуйте решение @TronicZomB. Он работает для деятельности с одним фрагментом.

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE);

Однако для действия с вложенными FragmentTransactions вы будете вынуждены использовать toggleSoftInput с параметрами SHOW_FORCED и HIDE_NOT_ALWAYS. HIDE_NOT_ALWAYS запрещает команде toggle закрывать уже открытую клавиатуру после изменения ориентации.

InputMethodManager imm = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE);
imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, InputMethodManager.HIDE_NOT_ALWAYS);

Чтобы скрыть клавиатуру позже время, которое вы можете использовать:

imm.hideSoftInputFromWindow(activity.findViewById(android.R.id.content).getWindowToken(), 0);

Попробуйте заменить InputMethodManager следующим:

 getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE);