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 | Подсказващ текст, показван в празно поле | „Въведете имейл" |
| android:inputType | Режим на въвеждане (текст, число, парола и т.н.) | textEmailAddress |
| android:maxLines | Максимален брой редове | 3 |
| android:maxLength | Максимална дължина на текст в символи | 100 |
| android:textColorHint | Цвят на подсказващия текст | #999999 |
Атрибутът android:hint е един от най-важните — информира потребителя какви данни се очакват в полето. При въвеждане на текст hint автоматично се скрива. Hint не участва в изпращането на формуляра и не се запазва като стойност на полето. Material Design препоръчва използването на TextInputLayout с плаващ етикет вместо обикновен 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) се комбинира с модификатори.
Всеки режим на въвеждане не само променя оформлението на клавиатурата, но и влияе върху обработката на текста: в числов режим са разрешени само цифри и десетичен разделител, в имейл режим е наличен символът @ и домейн разширения, а в телефонен режим се показват цифри и символите +, #, *. Правилният избор на 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 за валидация на имейл
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 за въвеждане на имейл и парола. В този пример са показани конфигурация на 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 г. Ще ви консултираме и ще предложим най-доброто решение.
Прочетете също