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 используется атрибут android:inputType=»textEmailAddress». В этом случае на клавиатуре появляется дополнительная клавиша с символом @, который обязательно используется в любом электронном адресе.
Phone
У элемента Phone используется атрибут android:inputType=»phone». Клавиатура похожа на клавиатуру из старого кнопочного сотового телефона с цифрами, а также с кнопками звёздочки и решётки.
Postal Address
Атрибут android:inputType=»textPostalAddress».
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" каждый первый символ каждого слова при вводе текста автоматически будет преобразовываться в прописную. Удобно, не так ли?
Значение 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.
Другие свойства
Методы
Основной метод класса EditText — getText(), который возвращает текст, содержащийся в текстовом поле. Возвращаемое значение имеет специальный тип 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, значит текст пуст.
В Kotlin есть удобная функция-расширение ifEmpty(), позволяющая сделать проверку и задать значение по умолчанию, что очень удобно во многих случаях.
Превращаем EditText в TextView
Практического смысла тут нет, но для общего развития превратим текстовое поле в текстовую метку. Для этого нужно сделать компонент недоступным, убрать курсор, установить прозрачный фон и отключить слушатель нажатий клавиш.
Как активировать поле edittext
Элемент EditText является подклассом класса TextView . Он также представляет текстовое поле, но теперь уже с возможностью ввода и редактирования текста. Таким образом, в EditText мы можем использовать все те же возможности, что и в TextView.
Из тех атрибутов, что не рассматривались в теме про TextView, следует отметить атрибут android:hint . Он позволяет задать текст, который будет отображаться в качестве подсказки, если элемент EditText пуст. Кроме того, мы можем использовать атрибут android:inputType , который позволяет задать клавиатуру для ввода. В частности, среди его значений можно выделить следующие:
text : обычная клавиатура для ввода однострочного текста
textMultiLine : многострочное текстовое поле
textEmailAddress : обычная клавиатура, на которой присутствует символ @ , ориентирована на ввод email
textUri : обычная клавиатура, на которой присутствует символ / , ориентирована на ввод интернет-адресов
textPassword : клавиатура для ввода пароля
textCapWords : при вводе первый введенный символ слова представляет заглавную букву, остальные — строчные
number : числовая клавиатура
phone : клавиатура в стиле обычного телефона
date : клавиатура для ввода даты
time : клавиатура для ввода времени
datetime : клавиатура для ввода даты и времени
Первое поле здесь обычное однострочное, а второе — многострочное. Чтобы во втором поле текст выравнивался по верху, дополнительно устанавливается атрибут android:gravity=»top» .

Одной из возможностей элемента EditText также является возможность обработать введенные символы по мере ввода пользователя. Для этого определим в файле activity_main.xml следующую разметку:
Предполагается, что введенные в EditText символы тут же будут отображаться в элементе TextView. И для этого также изменим код MainActivity:
С помощью метода addTextChangedListener() здесь к элементу EditText добавляется слушатель ввода текста — объект TextWatcher . Для его использования нам надо реализовать три метода, но в реальности нам хватит реализации метода onTextChanged , который вызывается при изменении текста. Введенный текст передается в этот метод в качестве параметра CharSequence. В самом методе просто передаем этот текст в элемент TextView.
В итоге при вводе в EditText все символы также будут отображаться в TextView:
# EditText
The EditText is the standard text entry widget in Android apps. If the user needs to enter text into an app, this is the primary way for them to do that.
EditText
There are many important properties that can be set to customize the behavior of an EditText. Several of these are listed below. Check out the official text fields guide for even more input field details.
Usage
An EditText is added to a layout with all default behaviors with the following XML:
Note that an EditText is simply a thin extension of the TextView and inherits all of the same properties.
Retrieving the Value
Getting the value of the text entered into an EditText is as follows:
Further Entry Customization
We might want to limit the entry to a single-line of text (avoid newlines):
You can limit the characters that can be entered into a field using the digits attribute:
This would restrict the digits entered to just "0" and "1". We might want to limit the total number of characters with:
Using these properties we can define the expected input behavior for text fields.
Adjusting Colors
You can adjust the highlight background color of selected text within an EditText with the android:textColorHighlight property:
Displaying Placeholder Hints
You may want to set the hint for the EditText control to prompt a user for specific input with:
Hints
Changing the bottom line color
Assuming you are using the AppCompat library, you can override the styles colorControlNormal, colorControlActivated, and colorControlHighlight:
If you do not see these styles applied within a DialogFragment, there is a known bug when using the LayoutInflater passed into the onCreateView() method.
The issue has already been fixed in the AppCompat v23 library. See this guide about how to upgrade. Another temporary workaround is to use the Activity’s layout inflater instead of the one passed into the onCreateView() method:
Listening for EditText Input
Check out the basic event listeners cliffnotes for a look at how to listen for changes to an EditText and perform an action when those changes occur.
Displaying Floating Label Feedback
Traditionally, the EditText hides the hint message (explained above) after the user starts typing. In addition, any validation error messages had to be managed manually by the developer.
With the TextInputLayout you can setup a floating label to display hints and error messages. You can find more details here
# Customizing the InputType
Text fields can have different input types, such as number, date, password, or email address. The type determines what kind of characters are allowed inside the field, and may prompt the virtual keyboard to optimize its layout for frequently used characters.
By default, any text contents within an EditText control is displayed as plain text. By setting the inputType
(opens new window) attribute, we can facilitate input of different types of information, like phone numbers and passwords:
Most common input types include:
| Type | Description |
|---|---|
| textUri | Text that will be used as a URI |
| textEmailAddress | Text that will be used as an e-mail address |
| textPersonName | Text that is the name of a person |
| textPassword | Text that is a password that should be obscured |
| number | A numeric only field |
| phone | For entering a phone number |
| date | For entering a date |
| time | For entering a time |
| textMultiLine | Allow multiple lines of text in the field |
The android:inputType also allows you to specify certain keyboard behaviors, such as whether to capitalize all new words or use features like auto-complete and spelling suggestions.
Here are some of the common input type values that define keyboard behaviors:
| Type | Description |
|---|---|
| textCapSentences | Normal text keyboard that capitalizes the first letter for each new sentence |
| textCapWords | Normal text keyboard that capitalizes every word. Good for titles or person names |
| textAutoCorrect | Normal text keyboard that corrects commonly misspelled words |
You can set multiple inputType attributes if needed (separated by ‘|’).
Example:
You can see a list of all available input types here
# Hiding SoftKeyboard
Hiding Softkeyboard is a basic requirement usually when working with EditText. The softkeyboard by default can only be closed by pressing back button and so most developers use InputMethodManager
(opens new window) to force Android to hide the virtual keyboard calling hideSoftInputFromWindow
(opens new window) and passing in the token of the window containing your focused view. The code to do the following:
The code is direct, but another major problems that arises is that the hide function needs to be called when some event occurs. What to do when you need the Softkeyboard hidden upon pressing anywhere other than your EditText? The following code gives a neat function that needs to be called in your onCreate() method just once.
# Icon or button inside Custom Edit Text and its action and click listeners.
This example will help to have the Edit text with the icon at the right side.
Note: In this just I am using setCompoundDrawablesWithIntrinsicBounds, So if you want to change the icon position you can achieve that using setCompoundDrawablesWithIntrinsicBounds in setIcon.
If you want to change the touch area you can change the EXTRA_TOUCH_AREA values default I gave as 50.
And for Enable the button and click listener you can call from your Activity or Fragment like this,
# inputype attribute
inputype attribute in EditText widget: (tested on Android 4.4.3 and 2.3.3)
textLongMessage= Keyboard: alphabet/default. Enter button: Send/Next. Emotion: yes. Case: lowercase. Suggestion: yes. Add. chars: , and . and everything
textFilter= Keyboard: alphabet/default. Enter button: Send/Next. Emotion: yes. Case: lowercase. Suggestion: no. Add. chars: , and . and everything
textCapWords= Keyboard: alphabet/default. Enter button: Send/Next. Emotion: yes. Case: Camel Case. Suggestion: yes. Add. chars: , and . and everything
textCapSentences= Keyboard: alphabet/default. Enter button: Send/Next. Emotion: yes. Case: Sentence case. Suggestion: yes. Add. chars: , and . and everything
time= Keyboard: numeric. Enter button: Send/Next. Emotion: no. Case: -. Suggestion: no. Add. chars: :
textMultiLine= Keyboard: alphabet/default. Enter button: nextline. Emotion: yes. Case: lowercase. Suggestion: yes. Add. chars: , and . and everything
number= Keyboard: numeric. Enter button: Send/Next. Emotion: no. Case: -. Suggestion: no. Add. chars: nothing
textEmailAddress= Keyboard: alphabet/default. Enter button: Send/Next. Emotion: no. Case: lowercase. Suggestion: no. Add. chars: @ and . and everything
(No type)= Keyboard: alphabet/default. Enter button: nextline. Emotion: yes. Case: lowercase. Suggestion: yes. Add. chars: , and . and everything
textPassword= Keyboard: alphabet/default. Enter button: Send/Next. Emotion: no. Case: lowercase. Suggestion: no. Add. chars: , and . and everything
text= Keyboard: Keyboard: alphabet/default. Enter button: Send/Next. Emotion: yes. Case: lowercase. Suggestion: yes. Add. chars: , and . and everything
textShortMessage= Keyboard: alphabet/default. Enter button: emotion. Emotion: yes. Case: lowercase. Suggestion: yes. Add. chars: , and . and everything
textUri= Keyboard: alphabet/default. Enter button: Send/Next. Emotion: no. Case: lowercase. Suggestion: no. Add. chars: / and . and everything
textCapCharacters= Keyboard: alphabet/default. Enter button: Send/Next. Emotion: yes. Case: UPPERCASE. Suggestion: yes. Add. chars: , and . and everything
phone= Keyboard: numeric. Enter button: Send/Next. Emotion: no. Case: -. Suggestion: no. Add. chars: *** # . — / () W P N , +**
textPersonName= Keyboard: alphabet/default. Enter button: Send/Next. Emotion: yes. Case: lowercase. Suggestion: yes. Add. chars: , and . and everything
Note: Auto-capitalization setting will change the default behavior.
Русские Блоги
Разработка приложений для 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: Содержимое текущего окна будет автоматически перемещаться так, чтобы текущий фокус никогда не перекрывался клавиатурой, и пользователь всегда мог видеть часть ввода.
Мы можем установить это свойство в 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! Я могу использовать это сейчас