Android studio edittext несколько строк

Содержание
  1. EditText
  2. Plain Text
  3. Person Name
  4. Password и Password (Numeric)
  5. E-mail
  6. Phone
  7. Postal Address
  8. Multiline Text
  9. Time и Date
  10. Number, Number (Signed), Number (Decimal)
  11. Текст-подсказка
  12. Вызов нужной клавиатуры
  13. Интерфейс InputType
  14. Атрибут android:imeOptions — параметры для текущего метода ввода
  15. Заблокировать текстовое поле
  16. Другие свойства
  17. Методы
  18. Выделение текста
  19. Обработка нажатий клавиш
  20. Пустой ли EditText
  21. Превращаем EditText в TextView
  22. Дополнительное чтение
  23. Многострочный EditText с кнопкой «Готово»
  24. ОТВЕТЫ
  25. Ответ 1
  26. Ответ 2
  27. Ответ 3
  28. Ответ 4
  29. Ответ 5
  30. Ответ 6
  31. Ответ 7
  32. Ответ 8
  33. Ответ 9
  34. Ответ 10
  35. Ответ 11
  36. Ответ 12
  37. Ответ 13
  38. Ответ 14
  39. Ответ 15
  40. Русские Блоги
  41. Разработка приложений для Android (41) — EditText (поле ввода) подробно
  42. EditText (поле ввода) подробно
  43. 1. Установите текст приглашения по умолчанию
  44. 2. После получения фокуса выделите все текстовое содержимое в компоненте.
  45. 3. Ограничьте тип ввода EditText.
  46. 4. Установите минимальную строку, максимальную строку, одну строку, несколько строк, автоматический перенос строк.
  47. 5. Задайте интервал текста, установите тип прописных букв английского алфавита.
  48. 6. Управляйте расстоянием вокруг EditText и расстоянием между внутренним текстом и рамкой.
  49. 7. Установите EditText, чтобы получить фокус, и одновременно появится небольшая клавиатура.
  50. 8. Управление положением курсора EditText.
  51. 9. Простая реализация EditText с помощью смайлов.
  52. 10. EditText с кнопкой удаления
  53. Резюме этого раздела:

EditText

Компонент EditText — это текстовое поле для пользовательского ввода, которое используется, если необходимо редактирование текста. Следует заметить, что EditText является наследником TextView.

В Android Studio на панели инструментов текстовые поля можно найти в категории Texts под разными именами.

Для быстрой разработки текстовые поля снабдили различными свойствами и дали разные имена: Plain Text, Person Name, Password, Password (Numeric), E-mail, Phone, Postal Address, Multiline Text, Time, Date, Number, Number (Signed), NumberDecimal.

Plain Text

Plain Text — самый простой вариант текстового поля без наворотов. При добавлении в разметку его XML-представление будет следующим:

Person Name

При использовании элемента Person Name в XML добавляется атрибут inputType, который отвечает за вид клавиатуры (только буквы) при вводе текста.

Password и Password (Numeric)

При использовании Password в inputType используется значение textPassword. При вводе текста сначала показывается символ, который заменяется на звёздочку. Если используется элемент Password (Numeric), то у атрибута inputType используется значение numberPassword. В этом случае на клавиатуре будут только цифры вместо букв. Вот и вся разница.

E-mail

У элемента E-mail используется атрибут android:inputType=»textEmailAddress». В этом случае на клавиатуре появляется дополнительная клавиша с символом @, который обязательно используется в любом электронном адресе.

Phone

У элемента Phone используется атрибут android:inputType=»phone». Клавиатура похожа на клавиатуру из старого кнопочного сотового телефона с цифрами, а также с кнопками звёздочки и решётки.

Postal Address

Multiline Text

У Multiline Text используется атрибут android:inputType=»textMultiLine» позволяющий сделать текстовое поле многострочным. Дополнительно можете установить свойство Lines (атрибут android:lines), чтобы указать количество видимых строк на экране.

Time и Date

Атрибут android:inputType=»time» или android:inputType=»date». На клавиатуре цифры, точка, запятая, тире.

Number, Number (Signed), Number (Decimal)

Атрибут android:inputType=»number» или numberSigned или numberDecimal. На клавиатуре только цифры и некоторые другие символы.

Текст-подсказка

Веб-мастера знают о таком атрибуте HTML5 как placeholder, когда в текстовом поле выводится строчка-подсказка приглушенным (обычно серым цветом). Живой пример приведён ниже.

Подсказка видна, если текстовый элемент не содержит пользовательского текста. Как только пользователь начинает вводить текст, то подсказка исчезает. Соответственно, если удалить пользовательский текст, то подсказка появляется снова. Это очень удобное решение во многих случаях, когда на экране мало места для элементов.

В Android у многих элементов есть свойство Hint (атрибут hint), который работает аналогичным образом. Установите у данного свойства нужный текст и у вас появится текстовое поле с подсказкой.

Запускаем приложение и видим подсказку, которая исчезает при попытке ввести текст.

Вызов нужной клавиатуры

Не во всех случаях нужна стандартная клавиатура с буковками и цифрами. Если вы пишете калькулятор, то проще показать пользователю цифровую клавиатуру. А если нужно ввести электронный адрес, то удобнее показать клавиатуру, где уже есть символ @. Ну а если ваше приложение пишется для котов, то достаточно вывести только те буквы, из которых можно составить слова Мяу и Жрать давай (к сожалению, такой клавиатуры ещё нет, но Google работает в этом направлении).

У элемента EditText на этот случай есть атрибут inputType:

В данном случае с атрибутом inputType=»textCapWords&quot каждый первый символ каждого слова при вводе текста автоматически будет преобразовываться в прописную. Удобно, не так ли?

Значение textCapSentences делает прописным каждый первый символ предложения.

Если вам нужен режим CapsLock, то используйте значение textCapCharacters и все буквы сразу будут большими при наборе.

Для набора телефонного номера используйте phone, и тогда вам будут доступны только цифры, звёздочка (*), решётка (#).

Для ввода веб-адресов удобно использовать значение textUri. В этом случае у вас появится дополнительная кнопочка .com (при долгом нажатии на нее появятся альтернативные варианты .net, .org и др.).

Читайте также:  Медиацентр для смарт тв андроид

Вот вам целый список доступных значений (иногда различия очень трудно различимы)

Интерфейс InputType

Кроме использования атрибута android:inputType мы можем добиться нужного поведения от текста при помощи интерфейса InputType.

Атрибут android:imeOptions — параметры для текущего метода ввода

У текстовых полей есть атрибут android:imeOptions, с помощью которого настраиваются параметры для текущего метода ввода. Например, когда EditText получает фокус и отображается виртуальная клавиатура, эта клавиатура содержит кнопку «Next» (Далее), если атрибут android:imeOptions содержит значение actionNext. Если пользователь касается этой кнопки, фокус перемещается к следующему компоненту, который принимает пользовательский ввод. Если компонент EditText получает фокус и на виртуальной клавиатуре появляется кнопка «Done» (Готово), значит использовался атрибут android:imeOptions со значением actionDone. Как только пользователь касается этой кнопки, система скрывает виртуальную клавиатуру.

Заблокировать текстовое поле

Для блокировки текстового поля присвойте значения false свойствам Focusable, Long clickable и Cursor visible.

Другие свойства

Методы

Основной метод класса EditTextgetText(), который возвращает текст, содержащийся в текстовом поле. Возвращаемое значение имеет специальный тип Editable, а не String.

Соответственно, для установки текста используется метод setText().

В Kotlin может возникнуть проблема, если программист захочет использовать конструкцию присвоения через свойство.

Большинство методов для работы с текстом унаследованы от базового класса TextView: setTypeface(null, Typeface), setTextSize(int textSize), SetTextColor(int Color).

Выделение текста

У EditText есть специальные методы для выделения текста:

  • selectAll() — выделяет весь текст;
  • setSelection(int start, int stop) — выделяет участок текста с позиции start до позиции stop;
  • setSelection(int index) — перемещает курсор на позицию index;

Предположим, нам нужно выделить популярное слово из трёх букв в большом слове (это слово «кот», а вы что подумали?).

Ещё есть метод setSelectAllOnFocus(), который позволяет выделить весь текст при получении фокуса.

Обработка нажатий клавиш

Для обработки нажатий клавиш необходимо зарегистрировать обработчик View.OnKeyListener, используя метод setOnKeyListener() элемента EditText. Например, для прослушивания события нажатия клавиши Enter во время ввода текста пользователем (или котом), используйте следующий код:

Пустой ли EditText

Чтобы проверить, пустой ли EditText, можно воспользоваться кодом:

Также можно проверять длину текста, если она равно 0, значит текст пуст.

Превращаем EditText в TextView

Практического смысла тут нет, но для общего развития превратим текстовое поле в текстовую метку. Для этого нужно сделать компонент недоступным, убрать курсор, установить прозрачный фон и отключить слушатель нажатий клавиш.

Также можно установить эти свойства через XML, кроме последнего пункта.

Дополнительное чтение

Beware EditText on API 21 — разница между версиями 21 и 22

Источник

Многострочный EditText с кнопкой «Готово»

Возможно ли иметь виджет EditText с android:inputType=»textMultiLine» и android:imeOptions=»actionDone» в то же время?

Мне нужно многострочное окно редактирования, при этом кнопка действия на клавиатуре будет выполнена, а не Enter (возврат каретки), но она, похоже, не работает.

ОТВЕТЫ

Ответ 1

Ответ 2

Из документации по android: ‘ «textMultiLine» Обычная текстовая клавиатура, которая позволяет пользователям вводить длинные строки текста, содержащие разрывы строк (возврат каретки). ‘ Поэтому атрибут textMultiLine не подходит, если вы хотите иметь кнопку «Готово» на клавиатуре.

Простой способ получить многострочное (в данном случае 3 строки) поле ввода с помощью сделанной кнопки — использовать EditText с

Однако по какой-то причине это работает только для меня, если я сделаю эти настройки в коде вместо файла макета (в onCreate) на

Я надеюсь, что это поможет кому-то, так как потребовалось довольно много времени, чтобы разобраться. Если вы найдете способ заставить его работать из манифеста, сообщите нам об этом.

Ответ 3

Рабочий пример! Создайте следующий пользовательский класс EditText, который поддерживает эту функцию, и используйте класс в XML файле. Рабочий код:

Ответ 4

Я думаю, что это способ сделать то, что вам нужно. Имея android:inputType=»textMultiLine» , android:imeOptions=»actionDone» делает android:imeOptions=»actionDone» функциональность ввода ключа. Просто имейте в виду, что вы можете использовать android:lines=»10″ и, возможно, удалить android:inputType=»textMultiLine» , но зависит от того, чего вы хотите достичь, иногда вам просто нужен android:inputType=»textMultiLine» и нет замены для этого.

Ответ 5

Это, кажется, отлично работает для меня.

Ответ 6

Короткий ответ: Нет, я считаю, что это невозможно до уровня API 11 (3.0).

Эта же проблема возникла здесь (обсуждается в комментариях к принятому ответу):

Из заключительного комментария:

Если посмотреть на несколько приложений на моем телефоне, кажется, что для этого есть многострочный блок с видимой надписью «Готово» или «Отправить» (например, приложение электронной почты).

Ответ 7

Если речь идет не о внешнем виде экранной клавиатуры, вы можете просто добавить слушателя на клавиатуру и запустить «done» -status, если пользователь вводит новую строку.

Ответ 8

если вы используете параметр ввода textImeMultiline с помощью imeoptions flagnext и actionnext, вы получаете следующую кнопку вместо возврата кариеса

Ответ 9

Я на 4.x и попытался вызвать setHorizontallyScrolling() (с или без setLine() или setMaxLines()), а также множество различных конфигураций XML, чтобы показать кнопку Готово. Ни один из них не работал. Суть в том, что если ваш EditText является многострочным, Android всегда будет хотеть показывать возврат каретки вместо кнопки «Готово», если вы не вложите в нее какой-то хак.

Читайте также:  Psp emulators on android

Самое меньшее решение для осложнений, которое я обнаружил, не включает переназначение поведения возврата каретки: fooobar.com/questions/20296/. . Это решение аннулирует нежелательное желание Android принудительно установить флаг IME_FLAG_NO_ENTER_ACTION для многострочных представлений, что приводит к исчезновению кнопки «Готово».

Ответ 10

Простой способ обойти эту ситуацию:

сохраните эти атрибуты в EditText:

затем добавьте этот код, чтобы скрыть клавиатуру только при нажатии ENTER:

Ответ 11

Я слишком долго боролся, но наконец нашел решение!

Просто создайте собственный класс EditText как таковой:

Этот класс удаляет lineBreaks (\n), обертывает текст, как textMultiline, и позволяет вам заменить кнопку Enter на ImeAction;).

Вам просто нужно вызвать его в XML вместо классического класса EditText.

Чтобы объяснить логику здесь:

  • Установите EditText как singleLine, чтобы показывать кнопку ImeAction вместо Enter.
  • Удалите горизонтальную прокрутку, чтобы текст переместился на следующую строку при достижении конца представления.
  • Просмотрите изменения компоновки с помощью onGlobalLayoutListener и установите параметр «line» в «lineCount» текущего текста, хранящегося в файле editText. Это то, что освежает его высоту.

Ответ 12

Рабочее решение здесь, создайте свой собственный EditTextView (просто расширьте текстовое представление) и переопределите onInputConnection с частью кода, который вы найдете в принятом ответе здесь: Многострочный EditText с Done SoftInput Action Label на 2.3

Ответ 13

Несмотря на то, что ни одно из других решений для меня никогда не работало, работало красиво и спасло меня от нескольких дней и дней от поиска в Google, конечно же, с небольшими завихрениями. К сожалению, не помню, откуда я получил код, и поэтому не могу дать автору кредит, который он заслуживает.

Ответ 14

Пример функции расширения Kotlin для включения действия Done и конкретной комбинации типов ввода в EditTextExt.kt:

Ответ 15

Чтобы сделать это в Kotlin (а также, возможно, примените другие конфигурации, такие как textCapSentences вы можете использовать эту функцию расширения:

Источник

Русские Блоги

Разработка приложений для Android (41) — EditText (поле ввода) подробно

EditText (поле ввода) подробно

1. Установите текст приглашения по умолчанию

Как показано на рисунке ниже, я считаю, что вы знакомы с этим интерфейсом входа в систему, верно? Мы используем этот интерфейс много раз.

По сравнению с другим, как насчет следующего?

Неплохо, правда? Конечно, я не буду публиковать здесь макет. Здесь мы представляем только два управляющих атрибута текста приглашения по умолчанию:

Два атрибута текста приглашения по умолчанию следующие:

Первый устанавливает содержание текста подсказки, второй устанавливает цвет текста подсказки!

2. После получения фокуса выделите все текстовое содержимое в компоненте.

Когда мы хотим получить фокус после щелчка по полю ввода, мы не перемещаем курсор в начало или конец текста; вместо этого мы получаем все текстовое содержимое в поле ввода! На этот раз мы можем использоватьselectAllOnFocusАтрибуты

Например, следующие визуализации: первая — для установки атрибута, вторая — для того, чтобы не устанавливать атрибут, после того, как EditText, установленный на true, получает фокус, весь текст выделяется!

3. Ограничьте тип ввода EditText.

Иногда нам может потребоваться ограничить вводимые данные. Например, при вводе номера телефона вы вводите строку букв, которая, очевидно, не соответствует нашим ожиданиям, а ограничение типа ввода может быть достигнуто с помощью атрибута inputType!

Например, ограничениями могут быть только номера телефонов, пароли (textPassword):

Необязательные параметры следующие:

Тип текста, в основном прописные, строчные и цифровые символы

Числовой тип

4. Установите минимальную строку, максимальную строку, одну строку, несколько строк, автоматический перенос строк.

EditText по умолчанию отображается в нескольких строках и может автоматически переноситься, то есть, когда одна строка не завершена, она автоматически переключается на вторую строку

Мы можем ограничить его, например
Установите минимальное количество строк:android:minLines=»3″
Или установите максимальное количество строк EditText:android:maxLines=»3″
PS: когда вводимое содержимое превышает maxline, текст автоматически прокручивается вверх! !

Кроме того, во многих случаях нам может потребоваться ограничить EditText, чтобы разрешить только однострочный ввод без прокрутки. Например, в приведенном выше примере интерфейса входа в систему нам нужно только установить

Может реализовать однострочный ввод без разрыва строки

5. Задайте интервал текста, установите тип прописных букв английского алфавита.

Мы можем установить интервал между словами с помощью следующих двух свойств:

Кроме того, EditText также предоставляет нам атрибуты для установки типа заглавных букв английских букв:android:capitalizeПо умолчанию нет, и предоставляются три дополнительных значения:

  • sentences:Используйте только первую букву
  • words:Размер первой буквы каждого слова, используйте пробелы, чтобы различать слова
  • characters:Каждая английская буква заглавная

6. Управляйте расстоянием вокруг EditText и расстоянием между внутренним текстом и рамкой.

Мы используемmarginСвязанные атрибуты увеличивают расстояние компонента относительно других элементов управления, например android: marginTop = «5dp».paddingУвеличьте расстояние между текстом в компоненте и границей компонента, например android: paddingTop = «5dp»

7. Установите EditText, чтобы получить фокус, и одновременно появится небольшая клавиатура.

Что касается проблемы с фокусом EditText и появлением клавиатуры, автор на некоторое время был запутан в последнем проекте. Требование: после входа в Activity, позвольте EditText получить фокус, и одновременно с этим появится клавиатура для ввода пользователем! Я перепробовал множество способов в Интернете, но не знаю, из-за ли это системы 5.1, которую использует автор! Вот краткое изложение:

Во-первых, позволить EditText получить фокус и очистить фокус

edit.requestFocus(); // Запрос на получение фокуса
edit.clearFocus(); // Очистить фокус

После фокусировки появляется маленькая клавиатура. Я трачу на это большую часть времени:

  • Нижняя версия системы напрямую requestFocus автоматически откроет маленькую клавиатуру
  • Немного более высокая версия требует, чтобы мы вручную играли на клавиатуре: Первый тип:

Я не знаю, почему, эти два метода не привели к появлению маленькой клавиатуры, автор наконец использовал:windowSoftInputModeАтрибут решает проблему всплывающей клавиатуры, вот, чтобы поделиться с вами:

android:windowSoftInputModeРежим взаимодействия между главным окном Activity и мягкой клавиатурой можно использовать, чтобы избежать проблемы перекрытия панели методов ввода, новой функции после Android 1.5.
Этот атрибут может влиять на две вещи:
[1] При создании фокуса вне зависимости от того, скрыта или отображается программная клавиатура
[2] Следует ли уменьшить размер активного главного окна, чтобы освободить место для виртуальной клавиатуры.

Простой момент — это управление клавиатурой, когда есть фокус, и нужно ли уменьшать размер окна Act, чтобы поместить небольшую клавиатуру
На выбор доступны следующие значения, можно задать несколько значений, разделенных знаком «|»
stateUnspecified: Состояние виртуальной клавиатуры не указано, система выберет соответствующее состояние или настройки в зависимости от темы
stateUnchanged: Когда появляется это действие, виртуальная клавиатура всегда будет оставаться в состоянии предыдущего действия, независимо от того, скрыта она или отображается
stateHidden: Когда пользователь выбирает действие, мягкая клавиатура всегда скрыта
stateAlwaysHidden: Когда основное окно Activity получает фокус, мягкая клавиатура всегда скрыта
stateVisible: Программная клавиатура обычно видна
stateAlwaysVisible: Когда пользователь выбирает действие, всегда отображается программная клавиатура
adjustUnspecified: Настройка по умолчанию, обычно система решает, скрыть или показать
adjustResize: Activity всегда регулирует размер экрана, чтобы оставить место для мягкой клавиатуры.
adjustPan: Содержимое текущего окна будет автоматически перемещаться так, чтобы текущий фокус никогда не перекрывался клавиатурой, и пользователь всегда мог видеть часть ввода.

Читайте также:  Pro android c with the ndk pdf

Мы можем установить это свойство в AndroidManifest.xml для действия, которое должно вызывать всплывающую клавиатуру, например:

Тогда requestFocus () в объекте EditText в порядке

8. Управление положением курсора EditText.

Иногда нам может потребоваться управлять курсором в EditText, чтобы переместиться в указанную позицию или выбрать текст!
EditText предоставляет намsetSelection() метод имеет две формы:


Один параметр предназначен для установки позиции курсора, а два параметра предназначены для установки средней скобки между начальной и конечной позицией, то есть частичный выбор!
Конечно, мы также можем вызватьsetSelectAllOnFocus(true); Выделите весь текст, когда EditText получит фокус!
Кроме того, мы также можем вызватьsetCursorVisible(false); Установите курсор так, чтобы он не отображался
также может вызывать getSelectionStart()с участиемgetSelectionEndПолучить переднюю и заднюю позицию текущего курсора

9. Простая реализация EditText с помощью смайлов.

Я считаю, что все знакомы с QQ или WeChat. Когда мы отправляем текст, мы можем отправлять его вместе со смайликами. Есть два простых способа добиться этого:

1. Используйте SpannableString для достижения
2. Используйте класс Html для достижения
Здесь автор использует первый. Вот только простой эффект. Вы можете извлечь метод и настроить EditText;
Вы также можете написать поле ввода с несколькими смайликами, например QQ!

Посмотрите на изображения (нажмите, чтобы добавить смайлики, чтобы завершить добавление смайлов):

Код тоже очень простой:

PS: Кстати, не забудьте поставить картинку

10. EditText с кнопкой удаления

Мы часто видим в интерфейсе ввода приложения:


Когда мы вводим содержимое, справа появляется такой маленький крестик. После того, как мы щелкнем по нему, содержимое в поле ввода будет очищено!
на самом деле очень просто реализовать:
Установите addTextChangedListener для EditText, затем перепишите абстрактный метод в TextWatcher (), который используется для отслеживания изменений в поле ввода; затем установитеCompoundDrawablesWithIntrinsicBounds, чтобы установить изображение маленького креста; наконец, перепишите метод onTouchEvent , Если область щелчка — это положение маленького крестика, очистите текст!

Код реализации следующий:

Резюме этого раздела:

В этом разделе вы познакомитесь с элементом управления EditText (поле ввода) в элементе управления Android UI. Есть много способов его использования. Конечно, описанная выше ситуация определенно не будет соответствовать реальным потребностям. В реальной разработке нам может потребоваться настроить EditText в соответствии с нашими собственными потребностями! Конечно, это включает в себя расширенную тему пользовательских элементов управления. В расширенной части мы подробно объясним пользовательские элементы управления в Android! Я могу использовать это сейчас

Источник

Оцените статью