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 = "Введіть текст"
    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
// Програмне налаштування inputType
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 для валідації email
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 для відправлення форми
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 року. Ми проконсультуємо вас і запропонуємо найкраще рішення.

Обговорити проект

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