EditText: что это, атрибуты и работа с полем ввода в Android

Автор: IT Sectr Опубликовано: 2026-07-07 Время чтения: 9 мин

EditText — это базовый компонент Android, предназначенный для ввода и редактирования текста в пользовательском интерфейсе. Он наследуется от TextView и предоставляет возможность ввода символов с виртуальной или физической клавиатуры. EditText поддерживает множество режимов: одно- и многострочный текст, пароли, числа, адреса электронной почты и телефонные номера. По данным Android Developers (2026), EditText используется в более чем 90% Android-приложений для создания форм, полей поиска, чатов и экранов ввода данных.

Главное

  • EditText — базовый компонент ввода текста в Android, наследник TextView.
  • Режимы ввода — поддерживает текст, числа, пароли, email, телефон и многострочный ввод.
  • Атрибуты XML — настройка через inputType, maxLines, hint, textColorHint и другие параметры.
  • Слушатели — TextWatcher для отслеживания изменений и OnEditorActionListener для обработки действий.
  • Material Design — TextInputLayout расширяет EditText плавающей меткой и сообщениями об ошибках.

Что такое EditText в 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-клавиатур и голосового ввода.

kotlin
val editText = EditText(context).apply {
    hint = "Enter text"
    inputType = InputType.TYPE_CLASS_TEXT
    maxLines = 1
    setTextColor(Color.parseColor("#000000"))
}

Основные атрибуты EditText

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 для более современного внешнего вида.

  • android:selectAllOnFocus — выделяет весь текст при получении фокуса (удобно для полей поиска).
  • android:maxLength — ограничивает количество вводимых символов, обрезая превышение.
  • android:lines — задаёт фиксированную высоту поля в строках (в отличие от minLines).
  • android:gravity — выравнивание текста внутри поля: left, center, top и т.д.
xml
                <!-- 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

Атрибут inputType определяет, какой тип клавиатуры будет показан пользователю и какие символы разрешены для ввода. Он представляет собой битовую маску, где класс ввода (TYPE_CLASS_TEXT, TYPE_CLASS_NUMBER, TYPE_CLASS_PHONE) комбинируется с модификаторами.

Каждый режим ввода не только меняет раскладку клавиатуры, но и влияет на обработку текста: в числовом режиме разрешены только цифры и десятичный разделитель, в email-режиме доступен символ @ и доменные расширения, а в телефонном режиме отображаются цифры и символы +, #, *. Выбор правильного inputType критически влияет на пользовательский опыт — неподходящая клавиатура заставляет пользователя переключать режимы, что увеличивает время заполнения формы на 30–50%.

По данным Material Design Guidelines (2025), рекомендуется использовать максимально конкретный inputType для каждого поля: textPassword для паролей, numberDecimal для цен, phone для номеров телефонов, textMultiLine для многострочного ввода. Это ускоряет заполнение форм и снижает количество ошибок ввода.

kotlin
// Programmatic inputType setup
editText.inputType = InputType.TYPE_CLASS_TEXT or
    InputType.TYPE_TEXT_FLAG_CAP_SENTENCES or
    InputType.TYPE_TEXT_FLAG_AUTO_CORRECT

Слушатели EditText: TextWatcher и OnEditorActionListener

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 на клавиатуре, что запускает сохранение или поиск.

kotlin
// 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

Рассмотрим полный пример создания экрана логина с использованием EditText для ввода email и пароля. В этом примере показана настройка inputType, валидация через TextWatcher и обработка нажатия кнопки входа.

XML-разметка экрана логина

xml
@+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" />

Программная настройка EditText

kotlin
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

EditText поддерживает кастомизацию через XML-атрибуты, темы и стили. Изменять можно цвет текста, цвет подсказки, цвет подчёркивания (backgroundTint), стиль шрифта, размер текста и многое другое. Material Components предоставляет тему MaterialComponents. EditText с кастомными атрибутами, включая boxStrokeColor, boxBackgroundColor и endIconMode.

Для изменения цвета подчёркивания EditText используется атрибут android:backgroundTint, который задаёт цвет для состояния по умолчанию и для состояния фокуса. В Material Design цвет подчёркивания управляется через colorPrimary темы. Для полной кастомизации можно создать собственный drawable для фона в папке res/drawable.

СтильАтрибутРезультат
Цвет текстаandroid:textColorМеняет цвет введённого текста
Цвет hintandroid:textColorHintМеняет цвет текста-подсказки
Подчёркиваниеandroid:backgroundTintМеняет цвет линии под полем
Размер шрифтаandroid:textSizeЗадаёт размер текста в sp
Шрифтandroid:fontFamilyПодключает кастомный шрифт

Для создания единого стиля всех EditText в приложении рекомендуется определить глобальный стиль в теме. Material Design предлагает стиль Widget.MaterialComponents.TextInputLayout.OutlinedBox, который автоматически применяется ко всем полям ввода, использующим TextInputLayout. Это обеспечивает консистентный внешний вид без дублирования атрибутов в каждой разметке.

Часто задаваемые вопросы

В чём разница между EditText и TextView?

EditText наследуется от TextView и добавляет возможность редактирования текста. TextView только отображает текст, а EditText позволяет пользователю вводить, удалять и изменять содержимое. EditText также поддерживает inputType, TextWatcher, управление курсором и другие функции, связанные с вводом данных.

Как запретить ввод определённых символов в EditText?

Используй InputFilter — интерфейс для фильтрации вводимых символов. EditText поддерживает установку массива фильтров через метод setFilters(). Например, InputFilter.LengthFilter ограничивает длину текста, а кастомный InputFilter может запрещать определённые символы, регулярные выражения или диапазоны Unicode.

Как получить текст из EditText в коде?

Вызови метод editText.text.toString() в Kotlin или editText.getText().toString() в Java. Свойство text возвращает Editable, который преобразуется в String через toString(). Важно проверять текст на null и пустоту перед использованием, особенно в формах с обязательными полями.

Как сделать EditText многострочным?

Установи атрибут android:inputType="textMultiLine" или программно добавь флаг InputType.TYPE_TEXT_FLAG_MULTI_LINE. При многострочном режиме EditText позволяет перенос строки по Enter и автоматически увеличивается по высоте. Для ограничения высоты используй android:maxLines или android:minLines.

Как отключить EditText для редактирования?

Установи атрибут android:enabled="false" или вызови editText.isEnabled = false в коде. Отключённый EditText не реагирует на касания, не получает фокус и отображается в сером цвете (disabled state). Альтернатива — использовать android:focusable="false", что отключает ввод, но сохраняет обычный внешний вид.

Итоги

  • EditText — базовый компонент ввода текста в Android, наследник TextView с поддержкой редактирования.
  • inputType определяет режим клавиатуры и разрешённые символы: текст, число, email, телефон, пароль.
  • TextWatcher позволяет отслеживать изменения текста в реальном времени для валидации и автодополнения.
  • OnEditorActionListener обрабатывает действия клавиатуры: Done, Search, Next, Send.
  • InputFilter ограничивает вводимые символы и длину текста через кастомные фильтры.
  • Атрибуты hint, maxLines, maxLength, textColorHint настраивают поведение и внешний вид поля.
  • Material Design стилизация через TextInputLayout обеспечивает современный внешний вид с floating label и ошибками.

Мы разработаем мобильное приложение под ключ

IT Sectr создаёт приложения для iOS и Android для стартапов и бизнеса с 2017 года. Мы проконсультируем вас и предложим наилучшее решение.

Обсудить проект

Читайте также