Я показываю поле ввода, используя AlertDialog
. EditText
Внутри диалога сама автоматически фокусируется , когда я звоню AlertDialog.show()
, но мягкая клавиатура не отображается автоматически.
Как сделать так, чтобы программная клавиатура автоматически отображалась при отображении диалогового окна? (и нет физической / аппаратной клавиатуры). Аналогично тому, как когда я нажимаю кнопку «Поиск», чтобы вызвать глобальный поиск, автоматически отображается программная клавиатура.
android
keyboard
android-edittext
soft-keyboard
Рэнди Сугианто 'Юку'
источник
источник
Ответы:
Вы можете создать фокус слушателя на
EditText
наAlertDialog
, затем получитьAlertDialog
«SWindow
. Оттуда вы можете сделать показ мягкой клавиатуры, позвонивsetSoftInputMode
.источник
final AlertDialog dialog = builder.create()
а затемshow
в диалоге вместо компоновщика.Для отображения клавиатуры используйте:
Для скрытия клавиатуры используйте:
источник
Вы можете запросить программную клавиатуру сразу после создания диалога (тест на SDK - r20)
источник
У меня была та же проблема, и я решил ее с помощью следующего кода. Я не уверен, как он будет вести себя на телефоне с аппаратной клавиатурой.
источник
Я нашел этот пример http://android-codes-examples.blogspot.com/2011/11/show-or-hide-soft-keyboard-on-opening.html . Добавьте следующий код прямо перед
alert.show()
.источник
или
источник
stateHidden
и когда я обнаружил, что пользователь создает новый элемент, то я отобразил клавиатуру, используя указанную вами строку кода. :) Еще раз спасибо.((Activity) context).getWindow()....
.Фрагменты кода из других ответов работают, но не всегда очевидно, где разместить их в коде, особенно если вы используете
AlertDialog.Builder
и следовали официальному диалогу, потому что он не используетfinal AlertDialog ...
илиalertDialog.show()
.Предпочтительнее
Потому что SOFT_INPUT_STATE_ALWAYS_VISIBLE будет скрывать клавиатуру, если фокус переключится с EditText, где SHOW_FORCED будет отображать клавиатуру до тех пор, пока она не будет явно отклонена, даже если пользователь возвращается на домашний экран или отображает последние приложения.
Ниже приведен рабочий код для AlertDialog, созданного с использованием пользовательского макета с EditText, определенным в XML. Он также устанавливает на клавиатуре клавишу «go» и позволяет ей активировать положительную кнопку.
alert_dialog.xml:
AlertDialog.java:
источник
Ну, это довольно старый пост, но есть что добавить.
Это 2 простых метода, которые помогают мне контролировать клавиатуру, и они работают просто идеально:
Показать клавиатуру
Скрыть клавиатуру
источник
getCurrentFocus()
?Activity
.Позвольте мне указать некоторую дополнительную информацию о решении Юку, потому что мне было трудно заставить это работать! Как получить объект AlertDialog из моего AlertDialog.Builder? Ну, это результат моей
alert.show()
казни:источник
Взгляните на это обсуждение, которое обрабатывает скрытие и показ IME вручную. Тем не менее, я чувствую, что, если сфокусированный
EditText
не поднимает IME, это потому, что вы вызываетеAlertDialog.show()
свойOnCreate()
или какой-то другой метод, который вызывается до того, как экран действительно будет представлен.OnPostResume()
Я полагаю, что в этом случае это нужно исправить.источник
Да, вы можете сделать,
setOnFocusChangeListener
это поможет вам.источник
Я знаю, что этот вопрос старый, я думаю, что использование функции расширения - более красивый способ показать клавиатуру для редактирования текста
Вот метод, который я использую, чтобы показать клавиатуру для текста редактирования.
код котлина: просто нужно позвонить
edittext.showKeyboard()
код Java:
источник
Если кто-то получает:
Попробуйте добавить контекст для вызова getSystemService.
Так
источник
Оригинальный вопрос касается диалогов, и мой EditText находится на регулярной основе. Во всяком случае, я подозреваю, что это должно работать для большинства из вас тоже. Так вот что работает для меня (выше предложенный метод с самым высоким рейтингом ничего не сделал для меня). Вот пользовательский EditView, который делает это (подклассы не нужны, но я нашел это удобным для моих целей, так как я хотел также захватить фокус, когда представление становится видимым).
На самом деле это в значительной степени совпадает с ответом Tidbecks. Я вообще-то не заметил его ответа, так как у него были нулевые голоса. Тогда я собирался просто прокомментировать его пост, но это было бы слишком долго, поэтому я все равно закончил делать этот пост. Тидбек указывает, что он не уверен, как это работает с устройствами, имеющими клавиатуры. Я могу подтвердить, что поведение кажется одинаковым в любом случае. Это так, что в портретном режиме программная клавиатура выскакивает, а в альбомной - нет. Сдвинуть или нет физическую клавиатуру не имеет значения на моем телефоне.
Потому что, я лично нашел поведение немного неловко , я выбрал для использования:
InputMethodManager.SHOW_FORCED
. Это работает так, как я хотел, чтобы это работало. Клавиатура становится видимой независимо от ориентации, однако, по крайней мере, на моем устройстве она не выскакивает, если выдвинута аппаратная клавиатура.источник
Кажется, проблема в том, что поскольку место, где вы вводите текст, изначально скрыто (или вложено, или что-то в этом роде), AlertDialog автоматически устанавливает флаг
WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM
илиWindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
таким образом, вещи не запускают мягкий ввод для отображения.Чтобы исправить это, добавьте следующее:
источник
попробуйте и используйте:
источник
Чтобы показать клавиатуру, мне пришлось сделать следующее
Android TextField: установить фокус + программный ввод программно
По сути, решение заключается в следующем
Где
ShowKeyboard
находитсяПосле успешного ввода, я также убедитесь, что я скрываю клавиатуру
источник
Поместите эти методы в свой класс Util и используйте где угодно.
Котлин
Ява
источник
Я создал хорошие функции расширения kotlin-esqe, если кому-то интересно
источник
Это хороший образец для вас:
источник
Почему этот ответ - Потому что выше решение будет показывать клавиатуру , но она не исчезнет , если вы щелкните в любом другом , что
EditText
. Поэтому вам нужно что-то сделать, чтобы клавиатура исчезла при потереEditText
фокуса.Вы можете достичь этого, выполнив следующие действия:
Сделайте родительский вид (контентный вид вашей деятельности) кликабельным и фокусируемым, добавив следующие атрибуты
Реализуйте метод hideKeyboard ()
Наконец, установите onFocusChangeListener вашего текста редактирования.
источник
Это немного сложно. Я так и сделал, и это сработало.
1.При первом вызове скрыть программный ввод из окна. Это позволит скрыть программный ввод, если программная клавиатура видна, или ничего не делать, если его нет.
2. Покажите ваш диалог
3. Затем просто позвоните, чтобы переключить мягкий ввод.
код:
источник
Попробуй это
источник
Перепробовал много но вот что у меня сработало (котлин):
источник
Глядя на https://stackoverflow.com/a/39144104/2914140, я немного упростил:
Это лучше, чем https://stackoverflow.com/a/11155404/2914140 :
потому что когда вы нажимаете кнопку «Домой» и переходите на домашний экран, клавиатура остается открытой.
источник
Я вызываю это в onCreate (), чтобы автоматически показывать клавиатуру при входе в Activity.
источник