Мне интересно, есть ли способ обработать нажатие пользователем Enterво время ввода EditText
, что-то вроде события onSubmit HTML.
Также интересно, есть ли способ манипулировать виртуальной клавиатурой таким образом, чтобы кнопка «Готово» помечалась как-то еще (например, «Перейти») и выполняла определенное действие при нажатии (опять же, как onSubmit).
android
android-edittext
textview
Феликс
источник
источник
Ответы:
Да.
Тоже да.
Вы хотите посмотреть на
android:imeActionId
иandroid:imeOptions
атрибутов, плюсsetOnEditorActionListener()
метод, все наTextView
.Чтобы изменить текст кнопки «Готово» на пользовательскую строку, используйте:
источник
источник
enter
по своему тексту редактирования, весь текст редактирования перемещается вниз ... Как я могу это исправить?Вот что ты делаешь. Он также скрыт в примере кода Android-разработчика «Bluetooth-чат». Замените жирные части, которые говорят «пример», своими собственными переменными и методами.
Сначала импортируйте то, что вам нужно, в основное действие, где вы хотите, чтобы кнопка возврата выполняла что-то особенное:
Теперь создайте переменную типа TextView.OnEditorActionListener для вашего ключа возврата (здесь я использую exampleListener );
Затем вам нужно рассказать слушателю две вещи о том, что делать при нажатии кнопки возврата. Он должен знать, о каком EditText мы говорим (здесь я использую exampleView ), а затем он должен знать, что делать при нажатии клавиши Enter (здесь, example_confirm () ). Если это последний или единственный EditText в вашей активности, он должен делать то же самое, что и метод onClick для вашей кнопки «Отправить» (или «ОК», «Подтвердить», «Отправить», «Сохранить» и т. Д.).
Наконец, установите слушатель (скорее всего, в вашем методе onCreate);
источник
KeyEvent.ACTION_UP
. Для того , чтобы это работало, необходимо сначала потреблятьACTION_DOWN
событие:if (actionId == EditorInfo.IME_NULL && event.getAction() == KeyEvent.ACTION_DOWN) { return true; }
. Затем вы можете проверитьACTION_UP
событие и выполнить действие (аналогично приведенному выше ответу). Если вы не используетеACTION_DOWN
событие, тоonEditorAction
не будут вызваныACTION_UP
.if (event.getKeyCode() == KeyEvent.KEYCODE_ENTER && event.getAction() == KeyEvent.ACTION_DOWN) {...}
- не смог получить ни один из других подходов к работеАппаратные клавиатуры всегда дают входные события, но программные клавиатуры возвращают разные идентификаторы действий и нули в singleLine EditTexts. Этот код отвечает каждый раз, когда пользователь нажимает enter в EditText, на который был установлен этот слушатель, независимо от EditText или типа клавиатуры.
Внешний вид клавиши ввода по умолчанию в singleLine = false дает изогнутую стрелку ввода клавиатуры. Когда singleLine = true в последнем EditText, ключ говорит DONE, а в EditTexts перед ним - NEXT. По умолчанию это поведение одинаково для всех эмуляторов vanilla, android и google. Атрибут scrollHor horizontal не имеет значения. Нулевой тест важен, потому что ответ телефонов на программные входы оставлен на усмотрение производителя, и даже в эмуляторах ванильные эмуляторы уровня 16 отвечают на длинные программные входы в многострочном режиме и scrollHor Horizontal EditTexts с actionId NEXT и нулевым значением для событие.
источник
Эта страница описывает, как именно это сделать.
https://developer.android.com/training/keyboard-input/style.html
Установите android: imeOptions, затем вы просто проверяете actionId в onEditorAction. Так что если вы установите imeOptions в 'actionDone', то вы должны проверить 'actionId == EditorInfo.IME_ACTION_DONE' в onEditorAction. Также обязательно установите android: inputType.
Вот EditText из приведенного выше примера:
Вы также можете установить это программно, используя функцию setImeOptions (int) . Вот OnEditorActionListener из приведенного выше примера:
источник
Я знаю, что это год, но я только что обнаружил, что это прекрасно работает для EditText.
Это предотвращает все, кроме текста и пространства. Я не мог табуляцию, «возврат» («\ n») или что-то еще.
источник
Так же, как дополнение к ответу Чада (который работал почти идеально для меня), я обнаружил, что мне нужно добавить проверку типа действия KeyEvent, чтобы предотвратить выполнение моего кода дважды (один раз при нажатии клавиши и один раз при нажатии клавиши вниз). событие).
См. Http://developer.android.com/reference/android/view/KeyEvent.html информацию о повторении событий действия (удержание клавиши ввода) и т. Д.
источник
У меня была похожая цель. Я хотел разрешить нажатие клавиши «Ввод» на клавиатуре (которую я хотел настроить) в AutoCompleteTextView, который расширяет TextView. Я пробовал разные решения сверху, и они, казалось, работали. НО у меня возникли некоторые проблемы, когда я переключил тип ввода на моем устройстве (Nexus 4 с AOKP ROM) с SwiftKey 3 (где он работал отлично) на стандартную клавиатуру Android (где вместо обработки моего кода от слушателя, была новая строка После нажатия клавиши «Ввод» я занял какое-то время, но я не знаю, будет ли он работать при любых обстоятельствах, независимо от того, какой тип ввода вы используете.
Итак, вот мое решение:
Установите для атрибута типа ввода TextView в xml значение «текст»:
Настройте метку клавиши «Ввод» на клавиатуре:
Установите OnEditorActionListener для TextView:
Я надеюсь, что это поможет другим избежать моих проблем, потому что они чуть не свели меня с ума.
источник
В своем xml добавьте атрибут imeOptions в editText
Затем в своем коде Java добавьте OnEditorActionListener в тот же EditText
Вот объяснение: imeOptions = actionDone назначит «actionDone» клавише EnterKey. Клавиша EnterKey на клавиатуре изменится с «Enter» на «Done». Поэтому, когда клавиша Enter нажата, она запустит это действие, и, таким образом, вы справитесь с этим.
источник
Вы также можете сделать это ..
источник
enter
по своему тексту редактирования, весь текст редактирования перемещается вниз ... Как я могу это исправить?У меня очень хорошо работает
Кроме того, скрыть клавиатуру
источник
Во-первых, вы должны установить EditText слушать нажатие клавиши
Во-вторых, определите событие после нажатия клавиши, например, событие для установки текста TextView:
И наконец, не забудьте импортировать EditText, TextView, OnKeyListener, KeyEvent сверху:
источник
работает отлично
}
работает отлично
источник
Xml
источник
Это должно работать
источник
Введите этот код в вашем редакторе, чтобы он мог импортировать необходимые модули.
источник
Это прекрасно работает на телефонах LG Android. Это мешает
ENTER
и другим специальным символам интерпретироваться как нормальные символы. КнопкаNext
илиDone
появляется автоматически иENTER
работает как положено.источник
Вот простая статическая функция, которую вы можете добавить в свой класс
Utils
илиKeyboards
класс, которая будет выполнять код, когда пользователь нажимает клавишу возврата на аппаратной или программной клавиатуре. Это модифицированная версия превосходного ответа @ earlcasperисточник
InputType в текстовом поле должен соответствовать тому
text
, что, по словам CommonsWare, работает. Просто пробовал все это, нет inputType перед пробной версией и ничего не получалось, Enter продолжал регистрироваться как soft enter. ПослеinputType = text
этого все, включая setImeLabel, сработало.Пример :
android:inputType="text"
источник
источник
Надежный способ ответить на <enter> в EditText - это TextWatcher , LocalBroadcastManager и BroadcastReceiver . Вам нужно добавить библиотеку поддержки v4, чтобы использовать LocalBroadcastManager. Я использую учебное пособие на vogella.com : 7.3 «Локальные широковещательные события с LocalBroadcastManager» из-за его полного лаконичного кода. Пример. В OnTextChanged прежде , чем это индекс конца изменения до изменения >; минус начать. Когда в TextWatcher поток пользовательского интерфейса занят обновлением редактируемого editText, поэтому мы отправляем Намерение, чтобы разбудить BroadcastReceiver, когда поток пользовательского интерфейса завершает обновление editText.
источник
android:inputType="textCapSentences"
), возврат каретки отфильтровывается из ввода, поэтому onTextChanged () не вызывается, когда пользователь нажимает клавишу Enter.На этот вопрос пока нет ответа с Butterknife
LAYOUT XML
JAVA APP
источник
Используя Kotlin, я создал функцию, которая обрабатывает все виды «готовых» действий для EditText, включая клавиатуру, и ее можно модифицировать, а также обрабатывать другие клавиши по своему усмотрению:
Итак, пример использования:
Что касается изменения метки, я думаю, что это зависит от приложения клавиатуры, и что оно обычно меняется только в зависимости от ландшафта, как написано здесь . Во всяком случае, пример использования для этого:
Или, если вы хотите в XML:
И результат (показан в ландшафте):
источник
Добавьте эти зависимости, и это должно работать:
источник
Это даст вам вызываемую функцию, когда пользователь нажимает клавишу возврата.
Применение
источник