InputType — este un atribut Android care determină caracterul datelor introduse și comportamentul tastaturii pentru câmpurile de text. Valoarea InputType reprezintă o mască binară care combină clasa de intrare (text, număr, telefon, dată) și modificatorii (multilinie, autocorectare, litere mari, introducere ascunsă). InputType influențează tipul tastaturii afișate, filtrarea caracterelor introduse și funcționarea autocompletării. Conform Android Developers (2026), InputType este unul dintre cele mai importante atribute pentru asigurarea introducerii corecte a datelor și trebuie setat explicit pentru fiecare câmp de text editabil.
Principalele puncte
InputType — este o constantă întreagă (Int) care codifică modul de introducere pentru un câmp de text. În Android, este definită în clasa android.text.InputType. Valoarea InputType constă din două părți: clasa de intrare (biții 0–4) și modificatorii (biții 5–31). Clasa de intrare determină tipul de bază al datelor — text, număr, telefon, dată. Modificatorii specifică comportamentul în cadrul clasei selectate — de exemplu, pentru clasa de text se poate activa autocorectarea, literele mari sau introducerea multilinie.
Mecanismul InputType funcționează la trei niveluri: la nivelul framework-ului Android determină care InputConnection va fi creat (conexiunea între EditText și IME); la nivelul IME (tastatură) indică ce caractere să afișeze și cum să proceseze introducerea; la nivelul aplicației filtrează caracterele prin InputFilter încorporat în EditText. Conform Android Source Code (AOSP, 2026), masca binară este procesată în metoda TextView.getInputType(), care returnează valoarea curentă, și setInputType(), care reconfigură filtrele interne și conexiunea cu IME.
O caracteristică importantă a InputType — nu poate fi citit din alt proces din motive de securitate. Acest lucru previne furtul de date prin accesarea tipului de intrare (de exemplu, determinarea dacă un câmp este parolă). La încercarea de a citi InputType din altă aplicație, se returnează TYPE_CLASS_TEXT în mod implicit.
// Constantele de bază InputType
InputType.TYPE_CLASS_TEXT // 0x0001 = 1
InputType.TYPE_CLASS_NUMBER // 0x0002 = 2
InputType.TYPE_CLASS_PHONE // 0x0003 = 3
InputType.TYPE_CLASS_DATETIME // 0x0004 = 4
// Masca pentru extragerea clasei
InputType.TYPE_MASK_CLASS // 0x0000000F
În Android sunt definite patru clase de bază InputType. Fiecare clasă corespunde unei categorii specifice de date și activează tipul corespunzător de tastatură. Clasa este indicată în biții 0–4 ai măștii binare și poate fi extrasă prin masca TYPE_MASK_CLASS (0x0F).
| Clasă | Constantă | Tastatură | Utilizare |
|---|---|---|---|
| TEXT | TYPE_CLASS_TEXT (1) | QWERTY | Text, comentarii, descriere |
| NUMBER | TYPE_CLASS_NUMBER (2) | Numerică | Cantitate, preț, vârstă |
| PHONE | TYPE_CLASS_PHONE (3) | Telefonică | Număr de telefon |
| DATETIME | TYPE_CLASS_DATETIME (4) | Dată/oră | Dată, oră |
TYPE_CLASS_DATETIME este rar folosit direct — de obicei pentru introducerea datei se utilizează DatePicker sau DatePickerDialog, nu un câmp de text. Cu toate acestea, în unele scenarii (introducerea rapidă manuală a datei) această clasă poate fi utilă. Nu are tastatură specializată și afișează de obicei tastatura numerică.
Fiecare clasă de intrare poate fi combinată cu variații (variation) — subtipuri indicate în biții 5–7. De exemplu, TYPE_TEXT_VARIATION_PASSWORD (bitul 5) adaugă clasei TEXT introducerea ascunsă. Biții de variație: 0x000000E0 (masca TYPE_MASK_VARIATION).
Flagurile-modificatoare InputType (biții 8–31) adaugă capacități suplimentare clasei de bază. Ele nu schimbă tipul tastaturii, dar modifică comportamentul de introducere. Flagurile sunt specifice fiecărei clase — flagurile pentru TEXT nu funcționează cu NUMBER și invers. Mai jos sunt enumerați modificatorii principali pentru fiecare clasă.
Conform Android Developers Documentation (2026), flagurile pentru diferite clase nu se suprapun — încercarea de a folosi un flag TEXT cu NUMBER va fi ignorată. Pentru verificarea unui flag setat se utilizează ȘI binar: (inputType and FLAG) != 0.
Combinația corectă a InputType cu clase și flaguri este cheia creării de formulare confortabile. Să examinăm scenariile tipice și configurațiile InputType corespunzătoare. Fiecare scenariu optimizează introducerea pentru un tip specific de date, făcând formularul intuitiv și accelerând completarea.
| Scenariu | InputType | Tastatură |
|---|---|---|
| Nume | textCapWords | QWERTY, fiecare cuvânt cu majusculă |
| textEmailAddress | QWERTY cu @ și . | |
| Parolă | textPassword | QWERTY, introducere ascunsă |
| Telefon | phone | Cifre cu +, #, * |
| Preț | numberDecimal | Cifre cu virgulă |
| Cantitate | number | Doar cifre |
| Comentariu | textCapSentences|textMultiLine | QWERTY, multilinie |
| Căutare | text|textNoSuggestions | QWERTY fără sugestii |
// Combinația pentru câmpul preț
editText.inputType = InputType.TYPE_CLASS_NUMBER or
InputType.TYPE_NUMBER_FLAG_DECIMAL
// Combinația pentru câmpul comentariu
editText.inputType = InputType.TYPE_CLASS_TEXT or
InputType.TYPE_TEXT_FLAG_CAP_SENTENCES or
InputType.TYPE_TEXT_FLAG_MULTI_LINE
Setarea InputType programatic prin setInputType() suprascrie valoarea anterioară. Dacă trebuie schimbată doar o parte a măștii (de exemplu, adăugarea unui flag), trebuie salvată valoarea curentă, modificată și aplicată din nou. Fiecare apel setInputType() reconfigură filtrele interne ale EditText.
Metoda setRawInputType() se deosebește de setInputType prin faptul că nu provoacă reconfigurarea filtrelor și sugestiilor. Este folosită pentru modificarea temporară a InputType fără reîncărcarea completă a stării EditText. După apelarea setInputType(), se recomandă repornirea IME pentru ca tastatura să se actualizeze.
// Comutarea între parolă și text vizibil
fun togglePasswordVisibility(editText: EditText) {
val currentType = editText.inputType
val isPassword = (currentType and
InputType.TYPE_TEXT_VARIATION_PASSWORD) != 0
editText.inputType = if (isPassword) {
InputType.TYPE_CLASS_TEXT or
InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD
} else {
InputType.TYPE_CLASS_TEXT or
InputType.TYPE_TEXT_VARIATION_PASSWORD
}
// Păstrează poziția cursorului
val cursorPos = editText.selectionStart
editText.setSelection(cursorPos)
}
// Obține clasa de intrare
fun getInputClass(inputType: Int): Int {
return inputType and InputType.TYPE_MASK_CLASS
}
// Obține variația de intrare
fun getInputVariation(inputType: Int): Int {
return inputType and InputType.TYPE_MASK_VARIATION
}
// Verifică dacă este câmp de parolă
fun isPasswordField(editText: EditText): Boolean {
return (editText.inputType and
InputType.TYPE_TEXT_VARIATION_PASSWORD) != 0
}
Alegerea corectă a InputType nu este doar despre UX, ci și despre securitate și corectitudinea datelor. Recomandările principale includ: specificați întotdeauna InputType explicit pentru fiecare EditText; utilizați cea mai specifică clasă de intrare; nu combinați flaguri din clase diferite; pentru câmpurile cu date sensibile utilizați variațiile PASSWORD; pentru câmpurile de căutare utilizați imeOptions=„actionSearch”.
InputType influențează și funcționarea serviciilor de accesibilitate (Accessibility). Câmpurile cu tipul textPassword beneficiază de protecție suplimentară față de cititoarele de ecran — acestea nu citesc cu voce tare caracterele introduse. Pentru câmpurile cu textEmailAddress, Screen Reader îl informează pe utilizator că câmpul este destinat emailului și oferă sugestii corespunzătoare.
Conform Material Design Guidelines (2025), InputType trebuie să corespundă tipului de date pe care utilizatorul le introduce. Un InputType incorect nu doar încetinește introducerea, dar poate duce și la erori: de exemplu, dacă pentru introducerea numărului de telefon se lasă textMultiLine, tastatura nu va afișa blocul numeric, iar utilizatorul va fi nevoit să schimbe manual aspectul de fiecare dată.
Întrebări frecvente
InputType — este un atribut EditText care determină tipul datelor introduse printr-o mască binară. Keyboard Type — este denumirea neoficială pentru tipul vizual al tastaturii care este activat de InputType. InputType influențează și filtrarea caracterelor, autocorectarea și autocompletarea, nu doar aspectul tastaturii.
Setează editText.inputType = InputType.TYPE_CLASS_TEXT sau folosește constanta InputType.TYPE_NULL (0x00000000) pentru resetare completă. Cu TYPE_NULL câmpul nu va afișa tastatura la focus. Pentru revenirea la introducerea standard de text, setează TYPE_CLASS_TEXT fără flaguri.
Nu se poate crea o nouă clasă InputType, deoarece face parte din framework-ul Android. Cu toate acestea, poți combina clasele și flagurile existente pentru a obține comportamentul dorit. Filtrarea suplimentară a caracterelor se implementează prin InputFilter, care se setează pe EditText prin metoda setFilters().
InputType este transmis sistemului de intrare prin InputConnection. IME citește clasa și variația InputType și selectează aspectul corespunzător al tastaturii. De exemplu, TYPE_CLASS_NUMBER cu TYPE_NUMBER_FLAG_DECIMAL face ca tastatura să afișeze blocul numeric cu virgulă. Majoritatea tastaturilor moderne respectă aceste recomandări.
Folosește proprietatea editText.inputType în Kotlin sau metoda editText.getInputType() în Java. Pentru extragerea clasei aplică masca: inputType and InputType.TYPE_MASK_CLASS. Pentru verificarea unui flag specific: inputType and InputType.TYPE_TEXT_FLAG_MULTI_LINE — dacă rezultatul != 0, flagul este setat.
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