InputType è un attributo Android che determina la natura dei dati di input e il comportamento della tastiera per i campi di testo. Il valore InputType è una maschera di bit che combina la classe di input (testo, numero, telefono, data) e modificatori (multiline, correzione automatica, maiuscole, input nascosto). InputType influisce sul tipo di tastiera visualizzata, sul filtraggio dei caratteri di input e sul comportamento di riempimento automatico. Secondo Android Developers (2026), InputType è uno degli attributi più importanti per garantire un corretto input dei dati e dovrebbe essere impostato esplicitamente per ogni campo di testo modificabile.
Punti chiave
InputType è una costante intera (Int) che codifica la modalità di input per un campo di testo. In Android, è definita nella classe android.text.InputType. Il valore InputType è composto da due parti: la classe di input (bit 0–4) e i modificatori (bit 5–31). La classe di input definisce il tipo di dato di base — testo, numero, telefono, data. I modificatori specificano il comportamento all'interno della classe selezionata — ad esempio, per la classe testo, è possibile attivare la correzione automatica, le maiuscole o l'input multiline.
Il meccanismo InputType funziona a tre livelli: a livello del framework Android, determina quale InputConnection verrà creato (la connessione tra EditText e IME); a livello IME (tastiera), specifica quali caratteri visualizzare e come gestire l'input; a livello di applicazione, filtra i caratteri attraverso l'InputFilter integrato in EditText. Secondo Android Source Code (AOSP, 2026), la maschera di bit viene gestita nel metodo TextView.getInputType(), che restituisce il valore corrente, e setInputType(), che riconfigura i filtri interni e la connessione IME.
Una caratteristica importante di InputType è che non può essere letto da un altro processo per motivi di sicurezza. Ciò impedisce il furto di dati tramite l'accesso al tipo di input (ad esempio, determinare se un campo è una password). Quando si tenta di leggere InputType da un'altra applicazione, viene restituito TYPE_CLASS_TEXT per impostazione predefinita.
// Costanti InputType di base
InputType.TYPE_CLASS_TEXT // 0x0001 = 1
InputType.TYPE_CLASS_NUMBER // 0x0002 = 2
InputType.TYPE_CLASS_PHONE // 0x0003 = 3
InputType.TYPE_CLASS_DATETIME // 0x0004 = 4
// Maschera per estrarre la classe
InputType.TYPE_MASK_CLASS // 0x0000000F
Android definisce quattro classi di base InputType. Ogni classe corrisponde a una categoria di dati specifica e attiva il tipo di tastiera corrispondente. La classe è specificata nei bit 0–4 della maschera di bit e può essere estratta tramite la maschera TYPE_MASK_CLASS (0x0F).
| Classe | Costante | Tastiera | Utilizzo |
|---|---|---|---|
| TEXT | TYPE_CLASS_TEXT (1) | Tastiera QWERTY | Testo, commenti, descrizione |
| NUMBER | TYPE_CLASS_NUMBER (2) | Numerica | Quantità, prezzo, età |
| PHONE | TYPE_CLASS_PHONE (3) | Telefonica | Numero di telefono |
| DATETIME | TYPE_CLASS_DATETIME (4) | Data/ora | Data, ora |
TYPE_CLASS_DATETIME è usato raramente direttamente — per l'input di date si utilizzano solitamente DatePicker o DatePickerDialog invece di un campo di testo. Tuttavia, in alcuni scenari (inserimento manuale rapido di una data), questa classe può essere utile. Non ha una tastiera specializzata e di solito mostra una tastiera numerica.
Ogni classe di input può essere combinata con variazioni — sottotipi specificati nei bit 5–7. Ad esempio, TYPE_TEXT_VARIATION_PASSWORD (bit 5) aggiunge input nascosto alla classe TEXT. Bit di variazione: 0x000000E0 (maschera TYPE_MASK_VARIATION).
I flag modificatori di InputType (bit 8–31) aggiungono capacità aggiuntive alla classe base. Non cambiano il tipo di tastiera ma modificano il comportamento di input. I flag sono specifici per ogni classe — i flag TEXT non funzionano con NUMBER e viceversa. Di seguito sono elencati i principali modificatori per ogni classe.
Secondo Android Developers Documentation (2026), i flag di classi diverse non si sovrappongono — tentare di usare un flag TEXT con NUMBER verrà ignorato. Per verificare un flag impostato, utilizzare AND bit a bit: (inputType and FLAG) != 0.
La corretta combinazione di classi e flag di InputType è la chiave per creare moduli facili da usare. Esaminiamo scenari tipici e le relative configurazioni InputType. Ogni scenario ottimizza l'input per un tipo di dato specifico, rendendo il modulo intuitivo e accelerando la compilazione.
| Scenario | InputType | Tastiera |
|---|---|---|
| Nome | textCapWords | QWERTY, ogni parola con maiuscola |
| textEmailAddress | QWERTY con @ e . | |
| Password | textPassword | QWERTY, input nascosto |
| Telefono | phone | Cifre con +, #, * |
| Prezzo | numberDecimal | Cifre con punto decimale |
| Quantità | number | Solo cifre |
| Commento | textCapSentences|textMultiLine | QWERTY, multiline |
| Ricerca | text|textNoSuggestions | QWERTY senza suggerimenti |
// Combinazione per campo prezzo
editText.inputType = InputType.TYPE_CLASS_NUMBER or
InputType.TYPE_NUMBER_FLAG_DECIMAL
// Combinazione per campo commento
editText.inputType = InputType.TYPE_CLASS_TEXT or
InputType.TYPE_TEXT_FLAG_CAP_SENTENCES or
InputType.TYPE_TEXT_FLAG_MULTI_LINE
Impostare InputType programmaticamente tramite setInputType() sovrascrive il valore precedente. Se è necessario modificare solo una parte della maschera (ad esempio, aggiungere un flag), è necessario salvare il valore corrente, modificarlo e riapplicarlo. Ogni chiamata a setInputType() riconfigura i filtri interni di EditText.
Il metodo setRawInputType() differisce da setInputType in quanto non attiva la riconfigurazione di filtri e suggerimenti. Viene utilizzato per modificare temporaneamente InputType senza ricaricare completamente lo stato di EditText. Dopo aver chiamato setInputType(), si consiglia di riavviare l'IME per aggiornare la tastiera.
// Alterna tra password e testo visibile
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
}
// Mantieni posizione cursore
val cursorPos = editText.selectionStart
editText.setSelection(cursorPos)
}
// Ottieni classe di input
fun getInputClass(inputType: Int): Int {
return inputType and InputType.TYPE_MASK_CLASS
}
// Ottieni variazione di input
fun getInputVariation(inputType: Int): Int {
return inputType and InputType.TYPE_MASK_VARIATION
}
// Verifica se è campo password
fun isPasswordField(editText: EditText): Boolean {
return (editText.inputType and
InputType.TYPE_TEXT_VARIATION_PASSWORD) != 0
}
Scegliere il InputType corretto non è solo una questione di UX, ma anche di sicurezza e correttezza dei dati. Le raccomandazioni principali includono: specificare sempre un InputType esplicito per ogni EditText; utilizzare la classe di input più specifica possibile; non combinare flag di classi diverse; utilizzare variazioni PASSWORD per campi con dati sensibili; utilizzare imeOptions="actionSearch" per campi di ricerca.
InputType influisce anche sul funzionamento dei servizi di accessibilità (Accessibility). I campi con tipo textPassword ricevono protezione aggiuntiva dagli screen reader — non leggono ad alta voce i caratteri inseriti. Per i campi textEmailAddress, lo screen reader informa l'utente che il campo è destinato all'email e fornisce suggerimenti appropriati.
Secondo Material Design Guidelines (2025), InputType dovrebbe corrispondere al tipo di dati che l'utente sta inserendo. Un InputType errato non solo rallenta l'inserimento, ma può anche causare errori: ad esempio, se si lascia textMultiLine per un campo di numero di telefono, la tastiera non mostrerà il tastierino numerico e l'utente dovrà cambiare manualmente disposizione ogni volta.
Domande frequenti
InputType è un attributo di EditText che definisce il tipo di dati di input tramite una maschera di bit. Keyboard Type è un nome non ufficiale per il tipo di tastiera visiva attivata da InputType. InputType influisce anche sul filtraggio dei caratteri, sulla correzione automatica e sul completamento automatico — non solo sulla disposizione della tastiera.
Imposta editText.inputType = InputType.TYPE_CLASS_TEXT o usa la costante InputType.TYPE_NULL (0x00000000) per un ripristino completo. Con TYPE_NULL, il campo non mostrerà la tastiera quando riceve il focus. Per tornare all'input di testo standard, imposta TYPE_CLASS_TEXT senza flag.
Non puoi creare una nuova classe InputType, poiché fa parte del framework Android. Tuttavia, puoi combinare classi e flag esistenti per ottenere il comportamento desiderato. Implementa il filtraggio aggiuntivo dei caratteri tramite InputFilter, che viene impostato su EditText usando il metodo setFilters().
InputType viene passato al sistema di input tramite InputConnection. L'IME legge la classe e la variazione di InputType e seleziona la disposizione della tastiera corrispondente. Ad esempio, TYPE_CLASS_NUMBER con TYPE_NUMBER_FLAG_DECIMAL fa sì che la tastiera mostri un tastierino numerico con punto decimale. La maggior parte delle tastiere moderne segue queste raccomandazioni.
Usa la proprietà editText.inputType in Kotlin o editText.getInputType() in Java. Per estrarre la classe, applica la maschera: inputType and InputType.TYPE_MASK_CLASS. Per verificare un flag specifico: inputType and InputType.TYPE_TEXT_FLAG_MULTI_LINE — se il risultato != 0, il flag è impostato.
Riepilogo
Svilupperemo un'applicazione mobile chiavi in mano
IT Sectr crea applicazioni iOS e Android per startup e aziende dal 2017. Ti consulteremo e ti proporremo la soluzione migliore.
Leggi anche