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