Я не знаю, связано ли это с вашей проблемой, но я столкнулся с некоторыми проблемами, используя только InputMethodManager.toggleSoftInput (), когда устройства иногда выходили из синхронизации и скрывались, когда я хотел показать, и наоборот .
Я добился определенного успеха, воспользовавшись тем, что хотя IMM.showSoftInput () не будет показывать клавиатуру, IMM.hideSoftInputFromWindow () будет надежно закрывать одну поэтому, когда я хочу показать клавиатуру, я теперь вызываю IMM.hideSoftInputFromWindow (), а затем IMM.toggleSoftInput () и использую IMM.hideSoftInputFromWindow (), чтобы скрыть ее.
[Через день ...]
Запись вышеупомянутого вчера заставила меня переосмыслить то, как я имел дело с программной клавиатурой (я имею в виду, showSoftinput () работает , просто не так, как мы ожидали), и вот лучший способ сделать это:
Во-первых, вам нужно настроить вид так, чтобы Android знал, что у него может быть программная клавиатура - как описано в документации для InputMethodManager. В моем случае у меня есть одно представление, полученное из GLSurfaceView, и поэтому я добавил:
setFocusable(true);
setFocusableInTouchMode(true);
конструктору, а затем следующие 2 переопределения:
@Override
public InputConnection onCreateInputConnection(EditorInfo outAttrs)
{
outAttrs.actionLabel = "";
outAttrs.hintText = "";
outAttrs.initialCapsMode = 0;
outAttrs.initialSelEnd = outAttrs.initialSelStart = -1;
outAttrs.label = "";
outAttrs.imeOptions = EditorInfo.IME_ACTION_DONE | EditorInfo.IME_FLAG_NO_EXTRACT_UI;
outAttrs.inputType = InputType.TYPE_NULL;
return new BaseInputConnection(this, false);
}
@Override
public boolean onCheckIsTextEditor ()
{
return true;
}
Теперь я могу показать клавиатуру с:
InputMethodManager mgr = (InputMethodManager)mActivity.getSystemService(Context.INPUT_METHOD_SERVICE);
mgr.showSoftInput(mView, 0);
и нажатия клавиш сообщаются через методы onKeyUp () и onKeyDown () представления.
Скрытие все еще выполняется с помощью hideSoftInputFromWindow ()