EditText — это базовый компонент Android, предназначенный для ввода и редактирования текста в пользовательском интерфейсе. Он наследуется от TextView и предоставляет возможность ввода символов с виртуальной или физической клавиатуры. EditText поддерживает множество режимов: одно- и многострочный текст, пароли, числа, адреса электронной почты и телефонные номера. По данным Android Developers (2026), EditText используется в более чем 90% Android-приложений для создания форм, полей поиска, чатов и экранов ввода данных.
Главное
EditText — это класс из пакета android.widget, который реализует интерактивное текстовое поле для ввода данных пользователем. В иерархии наследования Android EditText extends TextView, поэтому он наследует все свойства текстовой метки, включая управление шрифтами, цветами и выравниванием. Основное отличие EditText от TextView заключается в возможности редактирования содержимого — пользователь может вводить, удалять и изменять текст непосредственно в интерфейсе.
Каждый EditText связан с экземпляром Editable, который хранит введённый текст и поддерживает операции вставки, удаления и замены символов. При вводе текста EditText автоматически управляет позицией курсора, выделением текста и историей изменений для отмены (undo/redo). По данным Android Developers Guide (2026), EditText также поддерживает автодополнение через класс AutoCompleteTextView, который наследуется от EditText.
Архитектура EditText построена на разделении модели (Editable), представления (TextView) и контроллера (InputConnection). При получении фокуса EditText создаёт InputConnection, через который система ввода передаёт символы, нажатия клавиш и команды редактирования. Этот механизм обеспечивает совместимость с любыми методами ввода — от виртуальных клавиатур до физических Bluetooth-клавиатур и голосового ввода.
val editText = EditText(context).apply {
hint = "Enter text"
inputType = InputType.TYPE_CLASS_TEXT
maxLines = 1
setTextColor(Color.parseColor("#000000"))
}
EditText предоставляет десятки атрибутов для точной настройки поведения и внешнего вида. Их можно задавать как в XML-разметке, так и программно через Kotlin или Java. Атрибуты делятся на категории: управление текстом, ограничения, визуальное оформление и взаимодействие с клавиатурой.
| Атрибут | Описание | Пример значения |
|---|---|---|
| android:hint | Текст-подсказка, отображаемый в пустом поле | "Введите email" |
| android:inputType | Режим ввода (текст, число, пароль и т.д.) | textEmailAddress |
| android:maxLines | Максимальное количество строк | 3 |
| android:maxLength | Максимальная длина текста в символах | 100 |
| android:textColorHint | Цвет текста подсказки | #999999 |
Атрибут android:hint является одним из наиболее важных — он сообщает пользователю, какие данные ожидаются в поле. При вводе текста hint автоматически скрывается. Hint не участвует в отправке формы и не сохраняется как значение поля. Material Design рекомендует использовать TextInputLayout с floating label вместо простого hint для более современного внешнего вида.
<!-- EditText in XML layout -->
@+id/etEmail
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Enter email"
android:inputType="textEmailAddress"
android:maxLines="1"
android:importantForAutofill="yes" />
Атрибут inputType определяет, какой тип клавиатуры будет показан пользователю и какие символы разрешены для ввода. Он представляет собой битовую маску, где класс ввода (TYPE_CLASS_TEXT, TYPE_CLASS_NUMBER, TYPE_CLASS_PHONE) комбинируется с модификаторами.
Каждый режим ввода не только меняет раскладку клавиатуры, но и влияет на обработку текста: в числовом режиме разрешены только цифры и десятичный разделитель, в email-режиме доступен символ @ и доменные расширения, а в телефонном режиме отображаются цифры и символы +, #, *. Выбор правильного inputType критически влияет на пользовательский опыт — неподходящая клавиатура заставляет пользователя переключать режимы, что увеличивает время заполнения формы на 30–50%.
По данным Material Design Guidelines (2025), рекомендуется использовать максимально конкретный inputType для каждого поля: textPassword для паролей, numberDecimal для цен, phone для номеров телефонов, textMultiLine для многострочного ввода. Это ускоряет заполнение форм и снижает количество ошибок ввода.
// Programmatic inputType setup
editText.inputType = InputType.TYPE_CLASS_TEXT or
InputType.TYPE_TEXT_FLAG_CAP_SENTENCES or
InputType.TYPE_TEXT_FLAG_AUTO_CORRECT
TextWatcher — это интерфейс для отслеживания изменений текста в EditText в реальном времени. Он содержит три метода: beforeTextChanged вызывается перед изменением, onTextChanged — во время изменения, afterTextChanged — после завершения изменения текста. TextWatcher используется для валидации ввода, подсчёта символов, поиска и автодополнения.
OnEditorActionListener обрабатывает действия пользователя на клавиатуре: нажатие кнопки Done (IME_ACTION_DONE), поиска (IME_ACTION_SEARCH), отправки (IME_ACTION_SEND), перехода к следующему полю (IME_ACTION_NEXT) и других. Этот слушатель особенно полезен для организации навигации по форме — при нажатии Next фокус автоматически переходит к следующему полю, а при нажатии Done скрывается клавиатура и выполняется отправка.
По данным Android Developers Blog (2025), правильное использование OnEditorActionListener с атрибутом android:imeOptions позволяет создавать интуитивные формы без дополнительных кнопок отправки — пользователь заполняет поля и нажимает Done на клавиатуре, что запускает сохранение или поиск.
// TextWatcher for email validation
editText.addTextChangedListener(object : TextWatcher {
override fun afterTextChanged(s: Editable?) {
val isValid = Patterns.EMAIL_ADDRESS.matcher(s).matches()
editText.error = if (isValid) null else "Invalid email format"
}
})
// OnEditorActionListener for form submission
editText.setOnEditorActionListener { _, actionId, _ ->
if (actionId == EditorInfo.IME_ACTION_DONE) {
submitForm()
true
} else false
}
Рассмотрим полный пример создания экрана логина с использованием EditText для ввода email и пароля. В этом примере показана настройка inputType, валидация через TextWatcher и обработка нажатия кнопки входа.
@+id/etLoginEmail
android:layout_width="match_parent"
android:hint="Email"
android:inputType="textEmailAddress"
android:maxLines="1" />
@+id/etLoginPassword
android:layout_width="match_parent"
android:hint="Password"
android:inputType="textPassword"
android:maxLines="1" />
class LoginFragment : Fragment() {
private lateinit var etEmail: EditText
private lateinit var etPassword: EditText
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
etEmail = view.findViewById(R.id.etLoginEmail)
etPassword = view.findViewById(R.id.etLoginPassword)
etEmail.addTextChangedListener(emailWatcher)
etPassword.setOnEditorActionListener { _, actionId, _ ->
if (actionId == EditorInfo.IME_ACTION_DONE) {
performLogin()
true
} else false
}
}
}
EditText поддерживает кастомизацию через XML-атрибуты, темы и стили. Изменять можно цвет текста, цвет подсказки, цвет подчёркивания (backgroundTint), стиль шрифта, размер текста и многое другое. Material Components предоставляет тему MaterialComponents. EditText с кастомными атрибутами, включая boxStrokeColor, boxBackgroundColor и endIconMode.
Для изменения цвета подчёркивания EditText используется атрибут android:backgroundTint, который задаёт цвет для состояния по умолчанию и для состояния фокуса. В Material Design цвет подчёркивания управляется через colorPrimary темы. Для полной кастомизации можно создать собственный drawable для фона в папке res/drawable.
| Стиль | Атрибут | Результат |
|---|---|---|
| Цвет текста | android:textColor | Меняет цвет введённого текста |
| Цвет hint | android:textColorHint | Меняет цвет текста-подсказки |
| Подчёркивание | android:backgroundTint | Меняет цвет линии под полем |
| Размер шрифта | android:textSize | Задаёт размер текста в sp |
| Шрифт | android:fontFamily | Подключает кастомный шрифт |
Для создания единого стиля всех EditText в приложении рекомендуется определить глобальный стиль в теме. Material Design предлагает стиль Widget.MaterialComponents.TextInputLayout.OutlinedBox, который автоматически применяется ко всем полям ввода, использующим TextInputLayout. Это обеспечивает консистентный внешний вид без дублирования атрибутов в каждой разметке.
Часто задаваемые вопросы
EditText наследуется от TextView и добавляет возможность редактирования текста. TextView только отображает текст, а EditText позволяет пользователю вводить, удалять и изменять содержимое. EditText также поддерживает inputType, TextWatcher, управление курсором и другие функции, связанные с вводом данных.
Используй InputFilter — интерфейс для фильтрации вводимых символов. EditText поддерживает установку массива фильтров через метод setFilters(). Например, InputFilter.LengthFilter ограничивает длину текста, а кастомный InputFilter может запрещать определённые символы, регулярные выражения или диапазоны Unicode.
Вызови метод editText.text.toString() в Kotlin или editText.getText().toString() в Java. Свойство text возвращает Editable, который преобразуется в String через toString(). Важно проверять текст на null и пустоту перед использованием, особенно в формах с обязательными полями.
Установи атрибут android:inputType="textMultiLine" или программно добавь флаг InputType.TYPE_TEXT_FLAG_MULTI_LINE. При многострочном режиме EditText позволяет перенос строки по Enter и автоматически увеличивается по высоте. Для ограничения высоты используй android:maxLines или android:minLines.
Установи атрибут android:enabled="false" или вызови editText.isEnabled = false в коде. Отключённый EditText не реагирует на касания, не получает фокус и отображается в сером цвете (disabled state). Альтернатива — использовать android:focusable="false", что отключает ввод, но сохраняет обычный внешний вид.
Итоги
Мы разработаем мобильное приложение под ключ
IT Sectr создаёт приложения для iOS и Android для стартапов и бизнеса с 2017 года. Мы проконсультируем вас и предложим наилучшее решение.
Читайте также