Во-первых, не используйте toggleSoftInput()
.Это делает то, что говорит название - переключает состояние IME.Если вы действительно хотите, чтобы он был отображен, используйте showSoftInputFromWindow()
.
Во-вторых, нет причин для вызова restartInput()
.
Вызов showSoftInput()
с флагом 0
это именно то, что делает фреймворк, когда вы нажимаете на текстовое представление, чтобы показать IME.На самом деле вот код: https://android.googlesource.com/platform/frameworks/base/+/master/core/java/android/widget/TextView.java
Если вы можете отобразить IME, нажав на текстовое представление, но ваш собственный вызов не работает, вам действительно нужно выяснить, почему ваш вызовне работает.Я настоятельно рекомендую НЕ использовать SHOW_FORCED - это имеет несколько особенное поведение, которое, я сомневаюсь, вы хотите.(Например, если пользователь нажимает кнопку «Домой», IME остается открытым. Обычно это нежелательно.)
Наиболее вероятная причина того, что ваш вызов скрыл IME, чтобы не работать, состоит в том, что ваше окно не имеет фокуса вводаэтот момент ... вы, вероятно, увидите сообщение в журнале, если это так.На самом деле, обязательно загляните в журнал, так как при возникновении проблем часто печатаются сообщения.