EditText: cos'è, attributi e lavoro con i campi di input in Android

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

EditText è un componente Android di base progettato per inserire e modificare testo nell'interfaccia utente. Eredita da TextView e consente l'immissione di caratteri tramite tastiere virtuali o fisiche. EditText supporta molte modalità: testo a riga singola e multilinea, password, numeri, indirizzi email e numeri di telefono. Secondo Android Developers (2026), EditText è utilizzato in oltre il 90% delle app Android per creare moduli, campi di ricerca, chat e schermate di inserimento dati.

Punti chiave

  • EditText è il componente base di immissione testo in Android, una sottoclasse di TextView.
  • Modalità di input — supporta testo, numeri, password, email, telefono e input multilinea.
  • Attributi XML — configurazione tramite inputType, maxLines, hint, textColorHint e altri parametri.
  • Listener — TextWatcher per tracciare le modifiche e OnEditorActionListener per gestire le azioni.
  • Material Design — TextInputLayout estende EditText con etichetta fluttuante e messaggi di errore.

Cos'è EditText in Android

EditText è una classe del pacchetto android.widget che implementa un campo di testo interattivo per l'immissione di dati da parte dell'utente. Nella gerarchia di ereditarietà di Android, EditText estende TextView, quindi eredita tutte le proprietà di un'etichetta di testo, inclusa la gestione di caratteri, colori e allineamento. La differenza principale tra EditText e TextView è la capacità di modificare il contenuto — l'utente può inserire, eliminare e modificare il testo direttamente nell'interfaccia.

Ogni EditText è associato a un'istanza Editable che memorizza il testo inserito e supporta operazioni di inserimento, eliminazione e sostituzione. Durante la digitazione, EditText gestisce automaticamente la posizione del cursore, la selezione del testo e una cronologia delle modifiche per annullare/ripetere. Secondo la Guida per sviluppatori Android (2026), EditText supporta anche il completamento automatico tramite la classe AutoCompleteTextView, che eredita da EditText.

L'architettura di EditText si basa sulla separazione di modello (Editable), vista (TextView) e controller (InputConnection). Quando ottiene il focus, EditText crea un InputConnection attraverso il quale il sistema di input passa caratteri, pressioni di tasti e comandi di modifica. Questo meccanismo garantisce la compatibilità con qualsiasi metodo di input — dalle tastiere virtuali alle tastiere Bluetooth fisiche e all'input vocale.

kotlin
val editText = EditText(context).apply {
    hint = "Inserisci testo"
    inputType = InputType.TYPE_CLASS_TEXT
    maxLines = 1
    setTextColor(Color.parseColor("#000000"))
}

Attributi principali di EditText

EditText fornisce decine di attributi per ottimizzare il comportamento e l'aspetto. Possono essere impostati sia nei layout XML che a livello di programmazione tramite Kotlin o Java. Gli attributi sono suddivisi in categorie: controllo del testo, vincoli, stile visivo e interazione con la tastiera.

AttributoDescrizioneValore di esempio
android:hintTesto suggerimento visualizzato in un campo vuoto"Inserisci email"
android:inputTypeModalità di input (testo, numero, password, ecc.)textEmailAddress
android:maxLinesNumero massimo di righe3
android:maxLengthLunghezza massima del testo in caratteri100
android:textColorHintColore del testo suggerimento#999999

L'attributo android:hint è uno dei più importanti — indica all'utente quali dati sono attesi nel campo. Quando viene inserito del testo, il suggerimento viene automaticamente nascosto. Il suggerimento non partecipa all'invio del modulo e non viene salvato come valore del campo. Material Design raccomanda di utilizzare TextInputLayout con etichetta fluttuante invece di un semplice suggerimento per un aspetto più moderno.

  • android:selectAllOnFocus — seleziona tutto il testo quando ottiene il focus (utile per i campi di ricerca).
  • android:maxLength — limita il numero di caratteri inseriti, troncando l'eccesso.
  • android:lines — imposta un'altezza fissa del campo in righe (a differenza di minLines).
  • android:gravity — allineamento del testo all'interno del campo: left, center, top, ecc.
xml
                <!-- 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" />

Modalità di input e inputType

L'attributo inputType determina quale tipo di tastiera verrà mostrato all'utente e quali caratteri sono consentiti per l'immissione. È una maschera di bit in cui la classe di input (TYPE_CLASS_TEXT, TYPE_CLASS_NUMBER, TYPE_CLASS_PHONE) è combinata con modificatori.

Ogni modalità di input non solo cambia il layout della tastiera ma influisce anche sull'elaborazione del testo: in modalità numerica sono consentiti solo cifre e separatori decimali, in modalità email sono disponibili il simbolo @ e le estensioni di dominio, e in modalità telefono vengono visualizzati cifre e i simboli +, #, *. La scelta del giusto inputType influisce criticamente sull'esperienza utente — una tastiera inappropriata costringe gli utenti a cambiare modalità, aumentando il tempo di compilazione del modulo del 30–50%.

Secondo le Linee guida Material Design (2025), si raccomanda di utilizzare l'inputType più specifico per ogni campo: textPassword per le password, numberDecimal per i prezzi, phone per i numeri di telefono, textMultiLine per l'input multilinea. Questo accelera la compilazione dei moduli e riduce gli errori di input.

kotlin
// Configurazione programmatica di inputType
editText.inputType = InputType.TYPE_CLASS_TEXT or
    InputType.TYPE_TEXT_FLAG_CAP_SENTENCES or
    InputType.TYPE_TEXT_FLAG_AUTO_CORRECT

Listener di EditText: TextWatcher e OnEditorActionListener

TextWatcher è un'interfaccia per tracciare le modifiche al testo in EditText in tempo reale. Contiene tre metodi: beforeTextChanged viene chiamato prima di una modifica, onTextChanged viene chiamato durante la modifica, afterTextChanged viene chiamato dopo il completamento della modifica del testo. TextWatcher viene utilizzato per la validazione dell'input, il conteggio dei caratteri, la ricerca e il completamento automatico.

OnEditorActionListener gestisce le azioni dell'utente sulla tastiera: pressione di Done (IME_ACTION_DONE), Search (IME_ACTION_SEARCH), Send (IME_ACTION_SEND), Next (IME_ACTION_NEXT) e altre. Questo listener è particolarmente utile per organizzare la navigazione del modulo — premendo Next, il focus si sposta automaticamente al campo successivo, e premendo Done, la tastiera viene nascosta e l'invio viene eseguito.

Secondo il Blog degli sviluppatori Android (2025), l'uso corretto di OnEditorActionListener con l'attributo android:imeOptions consente di creare moduli intuitivi senza pulsanti di invio aggiuntivi — l'utente compila i campi e preme Done sulla tastiera, attivando il salvataggio o la ricerca.

kotlin
// TextWatcher per validazione email
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 per invio modulo
editText.setOnEditorActionListener { _, actionId, _ ->
    if (actionId == EditorInfo.IME_ACTION_DONE) {
        submitForm()
        true
    } else false
}

Esempi di codice con EditText

Vediamo un esempio completo di creazione di una schermata di login utilizzando EditText per l'inserimento di email e password. Questo esempio mostra la configurazione di inputType, la validazione tramite TextWatcher e la gestione della pressione del pulsante di login.

Layout XML della schermata di login

xml
@+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" />

Configurazione programmatica di EditText

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

Styling di EditText

EditText supporta la personalizzazione tramite attributi XML, temi e stili. È possibile modificare il colore del testo, il colore del suggerimento, il colore della sottolineatura (backgroundTint), lo stile del carattere, la dimensione del testo e molto altro. Material Components fornisce il tema MaterialComponents.EditText con attributi personalizzati tra cui boxStrokeColor, boxBackgroundColor e endIconMode.

Per modificare il colore della sottolineatura di EditText, utilizzare l'attributo android:backgroundTint che imposta il colore per lo stato predefinito e di focus. In Material Design, il colore della sottolineatura è gestito tramite colorPrimary del tema. Per una personalizzazione completa, è possibile creare un drawable personalizzato per lo sfondo nella cartella res/drawable.

StileAttributoRisultato
Colore del testoandroid:textColorModifica il colore del testo inserito
Colore suggerimentoandroid:textColorHintModifica il colore del testo suggerimento
Sottolineaturaandroid:backgroundTintModifica il colore della linea sotto il campo
Dimensione carattereandroid:textSizeImposta la dimensione del testo in sp
Carattereandroid:fontFamilyApplica un carattere personalizzato

Per creare uno stile coerente per tutti i campi EditText nell'app, si consiglia di definire uno stile globale nel tema. Material Design offre lo stile Widget.MaterialComponents.TextInputLayout.OutlinedBox, che viene applicato automaticamente a tutti i campi di input che utilizzano TextInputLayout. Questo garantisce un aspetto coerente senza duplicare gli attributi in ogni layout.

Domande frequenti

Qual è la differenza tra EditText e TextView?

EditText eredita da TextView e aggiunge funzionalità di modifica del testo. TextView visualizza solo il testo, mentre EditText consente all'utente di inserire, eliminare e modificare il contenuto. EditText supporta anche inputType, TextWatcher, gestione del cursore e altre funzioni relative all'immissione di dati.

Come limitare determinati caratteri in EditText?

Utilizza InputFilter — un'interfaccia per filtrare i caratteri di input. EditText supporta l'impostazione di un array di filtri tramite il metodo setFilters(). Ad esempio, InputFilter.LengthFilter limita la lunghezza del testo, mentre un InputFilter personalizzato può limitare caratteri specifici, espressioni regolari o intervalli Unicode.

Come ottenere il testo da EditText nel codice?

Chiama editText.text.toString() in Kotlin o editText.getText().toString() in Java. La proprietà text restituisce Editable, che viene convertito in String tramite toString(). Controlla sempre i valori null e vuoti prima di utilizzare il testo, specialmente nei moduli con campi obbligatori.

Come rendere EditText multilinea?

Imposta l'attributo android:inputType="textMultiLine" o aggiungi a livello di programmazione il flag InputType.TYPE_TEXT_FLAG_MULTI_LINE. In modalità multilinea, EditText consente interruzioni di riga con Invio e si espande automaticamente in altezza. Utilizza android:maxLines o android:minLines per limitare l'altezza.

Come disabilitare EditText per la modifica?

Imposta l'attributo android:enabled="false" o chiama editText.isEnabled = false nel codice. Un EditText disabilitato non risponde al tocco, non può ottenere il focus e viene visualizzato in grigio (stato disabilitato). Un'alternativa è utilizzare android:focusable="false", che disabilita l'input ma mantiene l'aspetto normale.

Riepilogo

  • EditText è il componente base di immissione testo in Android, una sottoclasse di TextView con supporto alla modifica.
  • inputType determina la modalità della tastiera e i caratteri consentiti: testo, numero, email, telefono, password.
  • TextWatcher consente di tracciare le modifiche al testo in tempo reale per validazione e completamento automatico.
  • OnEditorActionListener gestisce le azioni della tastiera: Done, Search, Next, Send.
  • InputFilter limita i caratteri di input e la lunghezza del testo tramite filtri personalizzati.
  • Attributi come hint, maxLines, maxLength, textColorHint configurano comportamento e aspetto.
  • Material Design tramite TextInputLayout offre un aspetto moderno con etichette fluttuanti ed errori.

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