EditText: какво е това, атрибути и работа с поле за въвеждане в Android

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

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

Основни точки

  • EditText — основен компонент за въвеждане на текст в Android, наследник на TextView.
  • Режими на въвеждане — поддържа текст, числа, пароли, имейл, телефон и многоредово въвеждане.
  • 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Подсказващ текст, показван в празно поле„Въведете имейл"
android:inputTypeРежим на въвеждане (текст, число, парола и т.н.)textEmailAddress
android:maxLinesМаксимален брой редове3
android:maxLengthМаксимална дължина на текст в символи100
android:textColorHintЦвят на подсказващия текст#999999

Атрибутът android:hint е един от най-важните — информира потребителя какви данни се очакват в полето. При въвеждане на текст hint автоматично се скрива. Hint не участва в изпращането на формуляра и не се запазва като стойност на полето. Material Design препоръчва използването на TextInputLayout с плаващ етикет вместо обикновен 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) се комбинира с модификатори.

Всеки режим на въвеждане не само променя оформлението на клавиатурата, но и влияе върху обработката на текста: в числов режим са разрешени само цифри и десетичен разделител, в имейл режим е наличен символът @ и домейн разширения, а в телефонен режим се показват цифри и символите +, #, *. Правилният избор на 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 за валидация на имейл
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 за въвеждане на имейл и парола. В този пример са показани конфигурация на 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 определя режима на клавиатурата и разрешените символи: текст, число, имейл, телефон, парола.
  • TextWatcher позволява проследяване на промени в текста в реално време за валидация и автоматично довършване.
  • OnEditorActionListener обработва действия на клавиатурата: Done, Search, Next, Send.
  • InputFilter ограничава въведените символи и дължина на текст чрез персонализирани филтри.
  • Атрибути hint, maxLines, maxLength, textColorHint конфигурират поведението и външния вид на полето.
  • Material Design стилизиране чрез TextInputLayout осигурява модерен външен вид с плаващ етикет и грешки.

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

IT Sectr създава iOS и Android приложения за стартъпи и бизнеси от 2017 г. Ще ви консултираме и ще предложим най-доброто решение.

Обсъдете проекта

Прочетете също