EditText — je základní komponenta Android určená pro zadávání a úpravy textu v uživatelském rozhraní. Dědí z TextView a poskytuje možnost zadávání znaků z virtuální nebo fyzické klávesnice. EditText podporuje mnoho režimů: jednořádkový a víceřádkový text, hesla, čísla, e-mailové adresy a telefonní čísla. Podle Android Developers (2026) se EditText používá ve více než 90% Android aplikací pro vytváření formulářů, vyhledávacích polí, chatů a obrazovek pro zadávání dat.
Hlavní body
EditText — je třída z balíčku android.widget, která implementuje interaktivní textové pole pro zadávání dat uživatelem. V hierarchii dědičnosti Android EditText extends TextView, takže dědí všechny vlastnosti textového štítku, včetně správy písem, barev a zarovnání. Hlavní rozdíl mezi EditText a TextView spočívá v možnosti úpravy obsahu — uživatel může přímo v rozhraní zadávat, mazat a měnit text.
Každý EditText je propojen s instancí Editable, která ukládá zadaný text a podporuje operace vkládání, mazání a nahrazování znaků. Při zadávání textu EditText automaticky spravuje pozici kurzoru, výběr textu a historii změn pro undo/redo. Podle Android Developers Guide (2026) EditText také podporuje automatické doplňování prostřednictvím třídy AutoCompleteTextView, která dědí z EditText.
Architektura EditText je postavena na oddělení modelu (Editable), pohledu (TextView) a řadiče (InputConnection). Při získání fokusu EditText vytváří InputConnection, přes který systém zadávání předává znaky, stisky kláves a příkazy pro úpravy. Tento mechanismus zajišťuje kompatibilitu s libovolnými metodami zadávání — od virtuálních klávesnic po fyzické Bluetooth klávesnice a hlasové zadávání.
val editText = EditText(context).apply {
hint = "Zadejte text"
inputType = InputType.TYPE_CLASS_TEXT
maxLines = 1
setTextColor(Color.parseColor("#000000"))
}
EditText poskytuje desítky atributů pro přesné nastavení chování a vzhledu. Lze je nastavit jak v XML rozvržení, tak programově pomocí Kotlin nebo Java. Atributy se dělí do kategorií: správa textu, omezení, vizuální vzhled a interakce s klávesnicí.
| Atribut | Popis | Příklad hodnoty |
|---|---|---|
| android:hint | Text nápovědy zobrazený v prázdném poli | „Zadejte e-mail" |
| android:inputType | Režim zadávání (text, číslo, heslo atd.) | textEmailAddress |
| android:maxLines | Maximální počet řádků | 3 |
| android:maxLength | Maximální délka textu ve znacích | 100 |
| android:textColorHint | Barva textu nápovědy | #999999 |
Atribut android:hint je jedním z nejdůležitějších — informuje uživatele, jaká data se v poli očekávají. Při zadávání textu se hint automaticky skryje. Hint se neúčastní odesílání formuláře a neukládá se jako hodnota pole. Material Design doporučuje používat TextInputLayout s plovoucím štítkem místo obyčejného hint pro modernější vzhled.
<!-- 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" />
Atribut inputType určuje, jaký typ klávesnice se uživateli zobrazí a jaké znaky jsou povoleny pro zadávání. Jedná se o bitovou masku, kde třída zadávání (TYPE_CLASS_TEXT, TYPE_CLASS_NUMBER, TYPE_CLASS_PHONE) je kombinována s modifikátory.
Každý režim zadávání nejen mění rozložení klávesnice, ale také ovlivňuje zpracování textu: v numerickém režimu jsou povoleny pouze číslice a desetinný oddělovač, v e-mailovém režimu je k dispozici symbol @ a doménové přípony, v telefonním režimu se zobrazují číslice a symboly +, #, *. Správná volba inputType má kritický dopad na uživatelský zážitek — nevhodná klávesnice nutí uživatele přepínat režimy, což zvyšuje čas vyplňování formuláře o 30–50%.
Podle Material Design Guidelines (2025) se doporučuje používat co nejkonkrétnější inputType pro každé pole: textPassword pro hesla, numberDecimal pro ceny, phone pro telefonní čísla, textMultiLine pro víceřádkové zadávání. To urychluje vyplňování formulářů a snižuje počet chyb při zadávání.
// Programové nastavení inputType
editText.inputType = InputType.TYPE_CLASS_TEXT or
InputType.TYPE_TEXT_FLAG_CAP_SENTENCES or
InputType.TYPE_TEXT_FLAG_AUTO_CORRECT
TextWatcher — je rozhraní pro sledování změn textu v EditText v reálném čase. Obsahuje tři metody: beforeTextChanged je volána před změnou, onTextChanged — během změny, afterTextChanged — po dokončení změny textu. TextWatcher se používá pro validaci vstupu, počítání znaků, vyhledávání a automatické doplňování.
OnEditorActionListener zpracovává akce uživatele na klávesnici: stisknutí tlačítka Done (IME_ACTION_DONE), vyhledávání (IME_ACTION_SEARCH), odeslání (IME_ACTION_SEND), přechod na další pole (IME_ACTION_NEXT) a další. Tento posluchač je zvláště užitečný pro organizaci navigace ve formuláři — při stisknutí Next se fokus automaticky přesune na další pole, při stisknutí Done se klávesnice skryje a provede se odeslání.
Podle Android Developers Blog (2025) umožňuje správné použití OnEditorActionListener s atributem android:imeOptions vytvářet intuitivní formuláře bez dalších tlačítek pro odeslání — uživatel vyplní pole a stiskne Done na klávesnici, což spustí uložení nebo vyhledávání.
// TextWatcher pro validaci e-mailu
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 pro odeslání formuláře
editText.setOnEditorActionListener { _, actionId, _ ->
if (actionId == EditorInfo.IME_ACTION_DONE) {
submitForm()
true
} else false
}
Podívejme se na úplný příklad vytvoření přihlašovací obrazovky s použitím EditText pro zadání e-mailu a hesla. V tomto příkladu je ukázána konfigurace inputType, validace pomocí TextWatcher a zpracování stisknutí tlačítka pro přihlášení.
@+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 podporuje přizpůsobení pomocí XML atributů, motivů a stylů. Lze měnit barvu textu, barvu nápovědy, barvu podtržení (backgroundTint), styl písma, velikost textu a mnoho dalšího. Material Components poskytuje motiv MaterialComponents. EditText s vlastními atributy, včetně boxStrokeColor, boxBackgroundColor a endIconMode.
Pro změnu barvy podtržení EditText se používá atribut android:backgroundTint, který nastavuje barvu pro výchozí stav a stav fokusu. V Material Design je barva podtržení spravována pomocí colorPrimary motivu. Pro úplné přizpůsobení lze vytvořit vlastní drawable jako pozadí do složky res/drawable.
| Styl | Atribut | Výsledek |
|---|---|---|
| Barva textu | android:textColor | Změní barvu zadaného textu |
| Barva hint | android:textColorHint | Změní barvu textu nápovědy |
| Podtržení | android:backgroundTint | Změní barvu čáry pod polem |
| Velikost písma | android:textSize | Nastaví velikost textu v sp |
| Písmo | android:fontFamily | Připojí vlastní písmo |
Pro vytvoření jednotného stylu všech EditText v aplikaci se doporučuje definovat globální styl v motivu. Material Design nabízí styl Widget.MaterialComponents.TextInputLayout.OutlinedBox, který se automaticky aplikuje na všechna vstupní pole používající TextInputLayout. To zajišťuje konzistentní vzhled bez duplikování atributů v každém rozvržení.
Často kladené otázky
EditText dědí z TextView a přidává možnost úpravy textu. TextView pouze zobrazuje text, zatímco EditText umožňuje uživateli zadávat, mazat a měnit obsah. EditText také podporuje inputType, TextWatcher, správu kurzoru a další funkce související se zadáváním dat.
Použijte InputFilter — rozhraní pro filtrování zadávaných znaků. EditText podporuje nastavení pole filtrů pomocí metody setFilters(). Například InputFilter.LengthFilter omezuje délku textu a vlastní InputFilter může zakázat určité znaky, regulární výrazy nebo rozsahy Unicode.
Zavolejte metodu editText.text.toString() v Kotlin nebo editText.getText().toString() v Java. Vlastnost text vrací Editable, který je převeden na String pomocí toString(). Je důležité zkontrolovat text na null a prázdnotu před použitím, zejména ve formulářích s povinnými poli.
Nastavte atribut android:inputType="textMultiLine" nebo programově přidejte příznak InputType.TYPE_TEXT_FLAG_MULTI_LINE. Ve víceřádkovém režimu EditText umožňuje zalomení řádku klávesou Enter a automaticky se zvětšuje na výšku. Pro omezení výšky použijte android:maxLines nebo android:minLines.
Nastavte atribut android:enabled="false" nebo zavolejte editText.isEnabled = false v kódu. Zakázaný EditText nereaguje na dotyky, nezískává fokus a zobrazuje se v šedé barvě (disabled state). Alternativou je použití android:focusable="false", které zakáže zadávání, ale zachová normální vzhled.
Shrnutí
Vyvineme mobilní aplikaci na klíč
IT Sectr vytváří aplikace pro iOS a Android pro startupy a podniky od roku 2017. Poradíme vám a navrhneme nejlepší řešení.
Přečtěte si také