InputType — cos'è, attributi di input e loro configurazione in Android

Autore: IT Sectr Pubblicato: 2026-07-07 Tempo di lettura: 9 min

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 maschera di bit che definisce la classe di input e i modificatori per EditText.
  • Classi di input — TYPE_CLASS_TEXT, TYPE_CLASS_NUMBER, TYPE_CLASS_PHONE, TYPE_CLASS_DATETIME.
  • Modificatori — flag che specificano il comportamento: MULTI_LINE, AUTO_CORRECT, PASSWORD, CAP_SENTENCES.
  • Combinazione — classe e modificatori sono combinati tramite OR bit a bit per una configurazione precisa.
  • Impatto — un InputType corretto accelera l'inserimento, riduce gli errori e migliora l'UX del modulo.

Cos'è InputType in Android

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.

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

Classi InputType: TEXT, NUMBER, PHONE, DATETIME

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).

ClasseCostanteTastieraUtilizzo
TEXTTYPE_CLASS_TEXT (1)Tastiera QWERTYTesto, commenti, descrizione
NUMBERTYPE_CLASS_NUMBER (2)NumericaQuantità, prezzo, età
PHONETYPE_CLASS_PHONE (3)TelefonicaNumero di telefono
DATETIMETYPE_CLASS_DATETIME (4)Data/oraData, 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).

Flag modificatori di InputType

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.

Flag per TEXT

  • TYPE_TEXT_FLAG_CAP_CHARACTERS — tutte le lettere maiuscole.
  • TYPE_TEXT_FLAG_CAP_WORDS — ogni parola inizia con maiuscola.
  • TYPE_TEXT_FLAG_CAP_SENTENCES — maiuscola all'inizio di frase (predefinito).
  • TYPE_TEXT_FLAG_AUTO_CORRECT — correzione automatica degli errori di battitura.
  • TYPE_TEXT_FLAG_AUTO_COMPLETE — completamento automatico (per AutoCompleteTextView).
  • TYPE_TEXT_FLAG_MULTI_LINE — input multiline.
  • TYPE_TEXT_FLAG_NO_SUGGESTIONS — disabilita suggerimenti.

Flag per NUMBER

  • TYPE_NUMBER_FLAG_SIGNED — consente numeri negativi (segno meno).
  • TYPE_NUMBER_FLAG_DECIMAL — consente punto decimale.

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.

Combinazioni InputType: esempi per diversi scenari

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.

ScenarioInputTypeTastiera
NometextCapWordsQWERTY, ogni parola con maiuscola
EmailtextEmailAddressQWERTY con @ e .
PasswordtextPasswordQWERTY, input nascosto
TelefonophoneCifre con +, #, *
PrezzonumberDecimalCifre con punto decimale
QuantitànumberSolo cifre
CommentotextCapSentences|textMultiLineQWERTY, multiline
Ricercatext|textNoSuggestionsQWERTY senza suggerimenti
kotlin
// 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

Lavoro programmatico con InputType

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.

Cambio di modalità

kotlin
// 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)
}

Estrazione di classe e variazione

kotlin
// 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
}

Best practice per la scelta di InputType

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.

  • Esplicità — imposta sempre InputType esplicitamente, non affidarti al valore predefinito (textMultiLine).
  • Specificità — usa il tipo più specifico: textEmailAddress, non text, per l'email.
  • Sicurezza — per password, PIN e dati di carte, utilizza variazioni PASSWORD.
  • Riempimento automatico — combina InputType con autofillHints per supportare i gestori di password.
  • Test — testa il comportamento su diverse tastiere (Gboard, SwiftKey, Samsung Keyboard).

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

In cosa differisce InputType da Keyboard Type?

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.

Come reimpostare InputType al valore predefinito?

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.

Posso creare un InputType personalizzato?

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().

Come influisce InputType sull'IME (tastiera)?

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.

Come verificare InputType in fase di esecuzione?

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

  • InputType — una maschera di bit composta da una classe di input (TEXT, NUMBER, PHONE, DATETIME) e modificatori.
  • Classe di input definisce il tipo di dato di base e il tipo di tastiera visualizzata.
  • Modificatori specificano il comportamento: multiline, correzione automatica, maiuscole, input nascosto.
  • Combinazione tramite OR bit a bit consente di creare configurazioni precise per diversi scenari.
  • Variazioni PASSWORD disabilitano la correzione automatica, nascondono i caratteri e impediscono l'archiviazione nel dizionario.
  • Impostazione programmatica tramite setInputType() richiede il riavvio dell'IME per aggiornare la tastiera.
  • Best practice — imposta InputType esplicitamente, usa tipi specifici e testa su diverse tastiere.

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.

Discuti il progetto

Leggi anche