EditText — este o componentă de bază Android destinată introducerii și editării textului în interfața utilizatorului. Moștenește din TextView și oferă posibilitatea introducerii caracterelor de la tastatura virtuală sau fizică. EditText suportă multiple moduri: text pe unul sau mai multe rânduri, parole, numere, adrese de e-mail și numere de telefon. Conform Android Developers (2026), EditText este utilizat în peste 90% din aplicațiile Android pentru crearea de formulare, câmpuri de căutare, chat-uri și ecrane de introducere a datelor.
Puncte cheie
EditText — este o clasă din pachetul android.widget care implementează un câmp text interactiv pentru introducerea datelor de către utilizator. În ierarhia de moștenire Android EditText extends TextView, deci moștenește toate proprietățile etichetei text, inclusiv gestionarea fonturilor, culorilor și alinierii. Diferența principală între EditText și TextView constă în posibilitatea de editare a conținutului — utilizatorul poate introduce, șterge și modifica textul direct în interfață.
Fiecare EditText este asociat cu o instanță Editable care stochează textul introdus și suportă operații de inserare, ștergere și înlocuire a caracterelor. La introducerea textului, EditText gestionează automat poziția cursorului, selectarea textului și istoricul modificărilor pentru undo/redo. Conform Android Developers Guide (2026), EditText suportă și autocompletarea prin clasa AutoCompleteTextView care moștenește din EditText.
Arhitectura EditText este construită pe separarea modelului (Editable), vederii (TextView) și controlerului (InputConnection). La primirea focusului, EditText creează un InputConnection prin care sistemul de introducere transmite caractere, apăsări de taste și comenzi de editare. Acest mecanism asigură compatibilitatea cu orice metode de introducere — de la tastaturi virtuale la tastaturi fizice Bluetooth și introducere vocală.
val editText = EditText(context).apply {
hint = "Introduceți textul"
inputType = InputType.TYPE_CLASS_TEXT
maxLines = 1
setTextColor(Color.parseColor("#000000"))
}
EditText oferă zeci de atribute pentru reglarea fină a comportamentului și aspectului. Acestea pot fi setate atât în layout-ul XML, cât și programatic prin Kotlin sau Java. Atributele se împart în categorii: gestionarea textului, restricții, aspect vizual și interacțiunea cu tastatura.
| Atribut | Descriere | Exemplu valoare |
|---|---|---|
| android:hint | Textul sugestiv afișat în câmpul gol | „Introduceți e-mailul" |
| android:inputType | Modul de introducere (text, număr, parolă etc.) | textEmailAddress |
| android:maxLines | Numărul maxim de rânduri | 3 |
| android:maxLength | Lungimea maximă a textului în caractere | 100 |
| android:textColorHint | Culoarea textului sugestiv | #999999 |
Atributul android:hint este unul dintre cele mai importante — informează utilizatorul ce date sunt așteptate în câmp. La introducerea textului, hint se ascunde automat. Hint nu participă la trimiterea formularului și nu se salvează ca valoare a câmpului. Material Design recomandă utilizarea TextInputLayout cu etichetă plutitoare în loc de hint simplu pentru un aspect mai modern.
<!-- 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" />
Atributul inputType determină ce tip de tastatură va fi afișată utilizatorului și ce caractere sunt permise pentru introducere. Reprezintă o mască de biți, unde clasa de introducere (TYPE_CLASS_TEXT, TYPE_CLASS_NUMBER, TYPE_CLASS_PHONE) este combinată cu modificatori.
Fiecare mod de introducere nu doar schimbă aspectul tastaturii, ci influențează și procesarea textului: în modul numeric sunt permise doar cifre și separatorul zecimal, în modul e-mail este disponibil simbolul @ și extensiile de domeniu, iar în modul telefon sunt afișate cifre și simbolurile +, #, *. Alegerea corectă a inputType are un impact critic asupra experienței utilizatorului — o tastatură nepotrivită obligă utilizatorul să comute modurile, ceea ce crește timpul de completare a formularului cu 30–50%.
Conform Material Design Guidelines (2025), se recomandă utilizarea celui mai specific inputType pentru fiecare câmp: textPassword pentru parole, numberDecimal pentru prețuri, phone pentru numere de telefon, textMultiLine pentru introducere pe mai multe rânduri. Aceasta accelerează completarea formularelor și reduce numărul de erori de introducere.
// Configurarea programatică a inputType
editText.inputType = InputType.TYPE_CLASS_TEXT or
InputType.TYPE_TEXT_FLAG_CAP_SENTENCES or
InputType.TYPE_TEXT_FLAG_AUTO_CORRECT
TextWatcher — este o interfață pentru urmărirea modificărilor textului în EditText în timp real. Conține trei metode: beforeTextChanged este apelată înainte de modificare, onTextChanged — în timpul modificării, afterTextChanged — după finalizarea modificării textului. TextWatcher este utilizat pentru validarea intrării, numărarea caracterelor, căutare și autocompletare.
OnEditorActionListener gestionează acțiunile utilizatorului pe tastatură: apăsarea butonului Done (IME_ACTION_DONE), căutare (IME_ACTION_SEARCH), trimitere (IME_ACTION_SEND), trecerea la câmpul următor (IME_ACTION_NEXT) și altele. Acest ascultător este deosebit de util pentru organizarea navigării în formular — la apăsarea Next, focusul trece automat la următorul câmp, iar la apăsarea Done, tastatura se ascunde și se efectuează trimiterea.
Conform Android Developers Blog (2025), utilizarea corectă a OnEditorActionListener cu atributul android:imeOptions permite crearea de formulare intuitive fără butoane suplimentare de trimitere — utilizatorul completează câmpurile și apasă Done pe tastatură, ceea ce declanșează salvarea sau căutarea.
// TextWatcher pentru validarea e-mailului
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 pentru trimiterea formularului
editText.setOnEditorActionListener { _, actionId, _ ->
if (actionId == EditorInfo.IME_ACTION_DONE) {
submitForm()
true
} else false
}
Să examinăm un exemplu complet de creare a unui ecran de autentificare folosind EditText pentru introducerea e-mailului și parolei. În acest exemplu sunt prezentate configurarea inputType, validarea prin TextWatcher și gestionarea apăsării butonului de autentificare.
@+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 suportă personalizarea prin atribute XML, teme și stiluri. Se poate modifica culoarea textului, culoarea sugestiei, culoarea sublinierii (backgroundTint), stilul fontului, dimensiunea textului și multe altele. Material Components oferă tema MaterialComponents. EditText cu atribute personalizate, inclusiv boxStrokeColor, boxBackgroundColor și endIconMode.
Pentru modificarea culorii sublinierii EditText se folosește atributul android:backgroundTint, care setează culoarea pentru starea implicită și pentru starea de focus. În Material Design, culoarea sublinierii este gestionată prin colorPrimary al temei. Pentru personalizare completă se poate crea un drawable propriu pentru fundal în folderul res/drawable.
| Stil | Atribut | Rezultat |
|---|---|---|
| Culoarea textului | android:textColor | Schimbă culoarea textului introdus |
| Culoarea hint | android:textColorHint | Schimbă culoarea textului sugestiv |
| Subliniere | android:backgroundTint | Schimbă culoarea liniei sub câmp |
| Dimensiune font | android:textSize | Setează dimensiunea textului în sp |
| Font | android:fontFamily | Conectează un font personalizat |
Pentru crearea unui stil unitar al tuturor EditText din aplicație se recomandă definirea unui stil global în temă. Material Design oferă stilul Widget.MaterialComponents.TextInputLayout.OutlinedBox care se aplică automat tuturor câmpurilor de introducere ce folosesc TextInputLayout. Aceasta asigură un aspect consistent fără duplicarea atributelor în fiecare layout.
Întrebări frecvente
EditText moștenește din TextView și adaugă posibilitatea de editare a textului. TextView doar afișează textul, iar EditText permite utilizatorului să introducă, să șteargă și să modifice conținutul. EditText suportă, de asemenea, inputType, TextWatcher, gestionarea cursorului și alte funcții legate de introducerea datelor.
Folosește InputFilter — o interfață pentru filtrarea caracterelor introduse. EditText suportă setarea unui tablou de filtre prin metoda setFilters(). De exemplu, InputFilter.LengthFilter limitează lungimea textului, iar un InputFilter personalizat poate interzice anumite caractere, expresii regulate sau intervale Unicode.
Apelează metoda editText.text.toString() în Kotlin sau editText.getText().toString() în Java. Proprietatea text returnează un Editable care este convertit în String prin toString(). Este important să verifici textul pentru null și gol înainte de utilizare, în special în formulare cu câmpuri obligatorii.
Setează atributul android:inputType="textMultiLine" sau adaugă programatic flag-ul InputType.TYPE_TEXT_FLAG_MULTI_LINE. În modul pe mai multe rânduri, EditText permite întreruperea rândului cu Enter și crește automat în înălțime. Pentru limitarea înălțimii folosește android:maxLines sau android:minLines.
Setează atributul android:enabled="false" sau apelează editText.isEnabled = false în cod. EditText dezactivat nu reacționează la atingeri, nu primește focus și se afișează în culoare gri (starea disabled). Alternativa este utilizarea android:focusable="false", care dezactivează introducerea, dar păstrează aspectul normal.
Rezumat
Vom dezvolta o aplicație mobilă la cheie
IT Sectr creează aplicații iOS și Android pentru startup-uri și afaceri din 2017. Vă vom consilia și vă vom propune cea mai bună soluție.
Citiți și