EditText: co to jest, atrybuty i praca z polem tekstowym w Androidzie

Autor: IT Sectr Opublikowano: 2026-07-07 Czas czytania: 9 min

EditText — to podstawowy komponent Android przeznaczony do wprowadzania i edycji tekstu w interfejsie użytkownika. Dziedziczy po TextView i umożliwia wprowadzanie znaków z wirtualnej lub fizycznej klawiatury. EditText obsługuje wiele trybów: tekst jedno- i wieloliniowy, hasła, liczby, adresy e-mail i numery telefonów. Według Android Developers (2026), EditText jest używany w ponad 90% aplikacji Android do tworzenia formularzy, pól wyszukiwania, czatów i ekranów wprowadzania danych.

Najważniejsze

  • EditText — podstawowy komponent wprowadzania tekstu w Androidzie, dziedziczący z TextView.
  • Tryby wprowadzania — obsługuje tekst, liczby, hasła, e-mail, telefon i wprowadzanie wieloliniowe.
  • Atrybuty XML — konfiguracja przez inputType, maxLines, hint, textColorHint i inne parametry.
  • Nasłuchiwacze — TextWatcher do śledzenia zmian i OnEditorActionListener do obsługi działań.
  • Material Design — TextInputLayout rozszerza EditText o pływającą etykietę i komunikaty błędów.

Czym jest EditText w Androidzie

EditText — to klasa z pakietu android.widget, która implementuje interaktywne pole tekstowe do wprowadzania danych przez użytkownika. W hierarchii dziedziczenia Android EditText extends TextView, więc dziedziczy wszystkie właściwości etykiety tekstowej, w tym zarządzanie czcionkami, kolorami i wyrównaniem. Główna różnica między EditText a TextView polega na możliwości edycji treści — użytkownik może wprowadzać, usuwać i zmieniać tekst bezpośrednio w interfejsie.

Każdy EditText jest powiązany z instancją Editable, która przechowuje wprowadzony tekst i obsługuje operacje wstawiania, usuwania i zamiany znaków. Podczas wprowadzania tekstu EditText automatycznie zarządza pozycją kursora, zaznaczaniem tekstu i historią zmian do cofania (undo/redo). Według Android Developers Guide (2026), EditText obsługuje również autouzupełnianie przez klasę AutoCompleteTextView, która dziedziczy z EditText.

Architektura EditText opiera się na separacji modelu (Editable), widoku (TextView) i kontrolera (InputConnection). Po otrzymaniu fokusu EditText tworzy InputConnection, przez który system wprowadzania przekazuje znaki, naciśnięcia klawiszy i polecenia edycji. Ten mechanizm zapewnia kompatybilność z dowolnymi metodami wprowadzania — od wirtualnych klawiatur po fizyczne klawiatury Bluetooth i wprowadzanie głosowe.

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

Podstawowe atrybuty EditText

EditText udostępnia dziesiątki atrybutów do precyzyjnego dostosowania zachowania i wyglądu. Można je ustawić zarówno w układzie XML, jak i programowo przez Kotlin lub Java. Atrybuty dzielą się na kategorie: zarządzanie tekstem, ograniczenia, wygląd wizualny i interakcja z klawiaturą.

AtrybutOpisPrzykładowa wartość
android:hintTekst podpowiedzi wyświetlany w pustym polu„Wprowadź e-mail"
android:inputTypeTryb wprowadzania (tekst, liczba, hasło itd.)textEmailAddress
android:maxLinesMaksymalna liczba wierszy3
android:maxLengthMaksymalna długość tekstu w znakach100
android:textColorHintKolor tekstu podpowiedzi#999999

Atrybut android:hint jest jednym z najważniejszych — informuje użytkownika, jakie dane są oczekiwane w polu. Podczas wprowadzania tekstu hint automatycznie znika. Hint nie uczestniczy w wysyłaniu formularza i nie jest zapisywany jako wartość pola. Material Design zaleca używanie TextInputLayout z pływającą etykietą zamiast zwykłego hint dla bardziej nowoczesnego wyglądu.

  • android:selectAllOnFocus — zaznacza cały tekst po otrzymaniu fokusu (wygodne w polach wyszukiwania).
  • android:maxLength — ogranicza liczbę wprowadzanych znaków, obcinając nadmiar.
  • android:lines — ustawia stałą wysokość pola w wierszach (w przeciwieństwie do minLines).
  • android:gravity — wyrównanie tekstu wewnątrz pola: left, center, top itd.
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" />

Tryby wprowadzania i inputType

Atrybut inputType określa, jaki typ klawiatury zostanie pokazany użytkownikowi i jakie znaki są dozwolone do wprowadzania. Jest to maska bitowa, gdzie klasa wprowadzania (TYPE_CLASS_TEXT, TYPE_CLASS_NUMBER, TYPE_CLASS_PHONE) jest łączona z modyfikatorami.

Każdy tryb wprowadzania nie tylko zmienia układ klawiatury, ale także wpływa na przetwarzanie tekstu: w trybie numerycznym dozwolone są tylko cyfry i separator dziesiętny, w trybie e-mail dostępny jest symbol @ i domeny, a w trybie telefonicznym wyświetlane są cyfry i symbole +, #, *. Wybór odpowiedniego inputType ma krytyczny wpływ na doświadczenie użytkownika — nieodpowiednia klawiatura zmusza użytkownika do przełączania trybów, co zwiększa czas wypełniania formularza o 30–50%.

Według Material Design Guidelines (2025), zaleca się używanie jak najbardziej konkretnego inputType dla każdego pola: textPassword dla haseł, numberDecimal dla cen, phone dla numerów telefonów, textMultiLine dla wprowadzania wieloliniowego. Przyspiesza to wypełnianie formularzy i zmniejsza liczbę błędów wprowadzania.

kotlin
// Programowe ustawienie inputType
editText.inputType = InputType.TYPE_CLASS_TEXT or
    InputType.TYPE_TEXT_FLAG_CAP_SENTENCES or
    InputType.TYPE_TEXT_FLAG_AUTO_CORRECT

Nasłuchiwacze EditText: TextWatcher i OnEditorActionListener

TextWatcher — to interfejs do śledzenia zmian tekstu w EditText w czasie rzeczywistym. Zawiera trzy metody: beforeTextChanged wywoływana przed zmianą, onTextChanged — w trakcie zmiany, afterTextChanged — po zakończeniu zmiany tekstu. TextWatcher jest używany do walidacji wprowadzania, liczenia znaków, wyszukiwania i autouzupełniania.

OnEditorActionListener obsługuje działania użytkownika na klawiaturze: naciśnięcie przycisku Done (IME_ACTION_DONE), wyszukiwania (IME_ACTION_SEARCH), wysyłania (IME_ACTION_SEND), przejścia do następnego pola (IME_ACTION_NEXT) i innych. Ten nasłuchiwacz jest szczególnie przydatny do organizacji nawigacji po formularzu — po naciśnięciu Next fokus automatycznie przechodzi do następnego pola, a po naciśnięciu Done klawiatura jest ukrywana i wykonywane jest wysyłanie.

Według Android Developers Blog (2025), prawidłowe użycie OnEditorActionListener z atrybutem android:imeOptions pozwala tworzyć intuicyjne formularze bez dodatkowych przycisków wysyłania — użytkownik wypełnia pola i naciska Done na klawiaturze, co uruchamia zapisywanie lub wyszukiwanie.

kotlin
// TextWatcher do walidacji e-maila
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 do wysyłania formularza
editText.setOnEditorActionListener { _, actionId, _ ->
    if (actionId == EditorInfo.IME_ACTION_DONE) {
        submitForm()
        true
    } else false
}

Przykłady kodu z EditText

Rozważmy pełny przykład tworzenia ekranu logowania z użyciem EditText do wprowadzania e-mail i hasła. W tym przykładzie pokazano konfigurację inputType, walidację przez TextWatcher i obsługę naciśnięcia przycisku logowania.

Układ XML ekranu logowania

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

Programowa konfiguracja 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
        }
    }
}

Stylizacja EditText

EditText obsługuje dostosowywanie przez atrybuty XML, motywy i style. Można zmieniać kolor tekstu, kolor podpowiedzi, kolor podkreślenia (backgroundTint), styl czcionki, rozmiar tekstu i wiele innych. Material Components udostępnia motyw MaterialComponents. EditText z niestandardowymi atrybutami, w tym boxStrokeColor, boxBackgroundColor i endIconMode.

Do zmiany koloru podkreślenia EditText używa się atrybutu android:backgroundTint, który ustawia kolor dla stanu domyślnego i stanu fokusu. W Material Design kolor podkreślenia jest zarządzany przez colorPrimary motywu. Do pełnego dostosowania można utworzyć własny drawable jako tła w folderze res/drawable.

StylAtrybutRezultat
Kolor tekstuandroid:textColorZmienia kolor wprowadzonego tekstu
Kolor hintandroid:textColorHintZmienia kolor tekstu podpowiedzi
Podkreślenieandroid:backgroundTintZmienia kolor linii pod polem
Rozmiar czcionkiandroid:textSizeUstawia rozmiar tekstu w sp
Czcionkaandroid:fontFamilyPodłącza niestandardową czcionkę

Do stworzenia jednolitego stylu wszystkich EditText w aplikacji zaleca się zdefiniowanie globalnego stylu w motywie. Material Design oferuje styl Widget.MaterialComponents.TextInputLayout.OutlinedBox, który automatycznie stosuje się do wszystkich pól wprowadzania używających TextInputLayout. Zapewnia to spójny wygląd bez powielania atrybutów w każdym układzie.

Często zadawane pytania

Jaka jest różnica między EditText a TextView?

EditText dziedziczy z TextView i dodaje możliwość edycji tekstu. TextView tylko wyświetla tekst, a EditText pozwala użytkownikowi wprowadzać, usuwać i zmieniać treść. EditText obsługuje również inputType, TextWatcher, zarządzanie kursorem i inne funkcje związane z wprowadzaniem danych.

Jak zabronić wprowadzania określonych znaków w EditText?

Użyj InputFilter — interfejsu do filtrowania wprowadzanych znaków. EditText obsługuje ustawienie tablicy filtrów przez metodę setFilters(). Na przykład InputFilter.LengthFilter ogranicza długość tekstu, a niestandardowy InputFilter może zabraniać określonych znaków, wyrażeń regularnych lub zakresów Unicode.

Jak pobrać tekst z EditText w kodzie?

Wywołaj metodę editText.text.toString() w Kotlin lub editText.getText().toString() w Java. Właściwość text zwraca Editable, który jest konwertowany na String przez toString(). Ważne jest sprawdzanie tekstu pod kątem null i pustości przed użyciem, szczególnie w formularzach z obowiązkowymi polami.

Jak zrobić wieloliniowy EditText?

Ustaw atrybut android:inputType="textMultiLine" lub programowo dodaj flagę InputType.TYPE_TEXT_FLAG_MULTI_LINE. W trybie wieloliniowym EditText umożliwia łamanie wiersza przez Enter i automatycznie zwiększa wysokość. Do ograniczenia wysokości użyj android:maxLines lub android:minLines.

Jak wyłączyć EditText do edycji?

Ustaw atrybut android:enabled="false" lub wywołaj editText.isEnabled = false w kodzie. Wyłączony EditText nie reaguje na dotknięcia, nie otrzymuje fokusu i wyświetla się w szarym kolorze (disabled state). Alternatywą jest użycie android:focusable="false", co wyłącza wprowadzanie, ale zachowuje normalny wygląd.

Podsumowanie

  • EditText — podstawowy komponent wprowadzania tekstu w Androidzie, dziedziczący z TextView z obsługą edycji.
  • inputType określa tryb klawiatury i dozwolone znaki: tekst, liczba, e-mail, telefon, hasło.
  • TextWatcher umożliwia śledzenie zmian tekstu w czasie rzeczywistym do walidacji i autouzupełniania.
  • OnEditorActionListener obsługuje działania klawiatury: Done, Search, Next, Send.
  • InputFilter ogranicza wprowadzane znaki i długość tekstu przez niestandardowe filtry.
  • Atrybuty hint, maxLines, maxLength, textColorHint konfigurują zachowanie i wygląd pola.
  • Material Design stylizacja przez TextInputLayout zapewnia nowoczesny wygląd z pływającą etykietą i błędami.

Opracujemy aplikację mobilną pod klucz

IT Sectr tworzy aplikacje na iOS i Androida dla startupów i firm od 2017 roku. Doradzimy Ci i zaproponujemy najlepsze rozwiązanie.

Omów projekt

Przeczytaj również