Можно ли иметь EditText
виджет с android:inputType="textMultiLine"
установленным и android:imeOptions="actionDone"
одновременно?
Мне бы хотелось, чтобы многострочное поле редактирования с кнопкой действия на клавиатуре было «Готово», а не «Ввод» (возврат каретки), но похоже, что оно не работает.
заранее спасибо
Ответы:
использование
и в XML:
источник
textField.setCursorVisible(false);
внутриonEditorActionListener
Из документации Android: ' "textMultiLine" Обычная текстовая клавиатура, которая позволяет пользователям вводить длинные строки текста, которые включают разрывы строк (возврат каретки) . Следовательно, атрибут textMultiLine не подходит, если вы хотите, чтобы на клавиатуре была кнопка «Готово».
Простой способ получить многострочное (в данном случае 3 строки) поле ввода с кнопкой «Готово» - использовать EditText с
Однако по какой-то причине это работает для меня, только если я выполняю эти настройки в коде вместо файла макета (в onCreate) с помощью
Я надеюсь, что это кому-то поможет, поскольку потребовалось довольно много времени, чтобы понять. Если вы найдете способ заставить его работать из манифеста, сообщите нам об этом.
источник
maxLines()
вместо того ,setLines()
если вы хотите , чтобы избежать изменения высотыEditText
setMaxLines(3)
) Большое спасибо!Рабочий пример! Создайте указанный ниже настраиваемый класс EditText, который поддерживает эту функцию, и используйте этот класс в файле xml. Рабочий код:
источник
Чтобы сделать это в Kotlin (а также при желании применить другие конфигурации, например,
textCapSentences
вы можете использовать эту функцию расширения:Использование:
источник
setRawInputType
вместоsetInputType
Я думаю, что это ваш способ поступать так. Наличие
android:inputType="textMultiLine"
,android:imeOptions="actionDone"
делает функциональность клавиши ввода неоднозначной. Просто имейте в виду, что вы можете использоватьandroid:lines="10"
и, возможно, удалитьandroid:inputType="textMultiLine"
, но в зависимости от того, чего вы хотите достичь, иногда вам просто нужно,android:inputType="textMultiLine"
и ему нет замены.источник
Кажется, это отлично работает для меня
источник
Многоразовое решение Kotlin
Установка этих значений в коде - единственное, что у меня сработало.
Мне это нужно часто, поэтому сделал это, чтобы код был чистым:
Если вы хотите добавить дополнительное настраиваемое действие в «Готово», попробуйте следующее:
Затем добавьте
hideKeyboard()
звонокEditText.multilineDone
источник
Краткий ответ: нет, я считаю, что это невозможно до уровня API 11 (3.0).
Здесь возникла та же проблема (обсуждается в комментариях к принятому ответу):
Кнопка действия мягкой клавиатуры Android
Из последнего комментария:
источник
Простой способ обойти эту ситуацию:
сохраните эти атрибуты в EditText:
затем добавьте этот код, чтобы скрыть клавиатуру только при нажатии ENTER:
источник
Если дело не во внешнем виде экранной клавиатуры, вы можете просто поместить прослушиватель ввода на клавиатуру и активировать статус «готово», если пользователь вводит новую строку.
источник
если вы используете параметр ввода textImeMultiline с imeoptions flagnext и actionnext, вы получите следующую кнопку вместо возврата cariage
источник
Хотя ни одно из других решений никогда не помогало мне, сработало следующее прекрасно и сэкономило мне дни и дни, когда нужно было больше гуглить, с некоторыми собственными поворотами, конечно. К сожалению, я не помню, откуда я взял код, и поэтому не могу отдать должное автору, которого он / она заслуживает.
В вашем Java-коде:
источник
Я использую 4.x и пробовал вызвать setHorizontallyScrolling () (с setLine () или setMaxLines () или без них), а также множество различных конфигураций XML, чтобы отобразить кнопку Done. Ни один из них не работал. Суть в том, что если ваш EditText является многострочным, Android всегда захочет показывать возврат каретки вместо кнопки «Готово», если только вы не добавите какие-то хаки для этого.
Решение с наименьшей сложностью, которое я обнаружил, которое не включает переназначение поведения возврата каретки, находится здесь: https://stackoverflow.com/a/12570003/3268329 . Это решение сведет на нет неустанное желание Android принудительно установить флаг IME_FLAG_NO_ENTER_ACTION для многострочных представлений, из-за чего кнопка «Готово» исчезнет.
источник
Я тоже довольно долго боролся, но наконец нашел решение!
Просто создайте собственный класс EditText как таковой:
Этот класс удаляет lineBreaks (\ n), обертывает текст, как это сделал бы textMultiline, И позволяет вам заменить кнопку Enter на ImeAction;).
Вам просто нужно вызвать его в своем XML вместо классического класса EditText.
Чтобы объяснить логику здесь:
источник
Рабочее решение здесь, создайте свой собственный EditTextView (просто расширьте текстовое представление) и переопределите onInputConnection с фрагментом кода, который вы найдете в принятом ответе здесь: Многострочный EditText с Done SoftInput Action Label на 2.3
источник