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 è 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.
val editText = EditText(context).apply {
hint = "Inserisci testo"
inputType = InputType.TYPE_CLASS_TEXT
maxLines = 1
setTextColor(Color.parseColor("#000000"))
}
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.
| Attributo | Descrizione | Valore di esempio |
|---|---|---|
| android:hint | Testo suggerimento visualizzato in un campo vuoto | "Inserisci email" |
| android:inputType | Modalità di input (testo, numero, password, ecc.) | textEmailAddress |
| android:maxLines | Numero massimo di righe | 3 |
| android:maxLength | Lunghezza massima del testo in caratteri | 100 |
| android:textColorHint | Colore 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.
<!-- 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" />
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.
// Configurazione programmatica di inputType
editText.inputType = InputType.TYPE_CLASS_TEXT or
InputType.TYPE_TEXT_FLAG_CAP_SENTENCES or
InputType.TYPE_TEXT_FLAG_AUTO_CORRECT
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.
// 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
}
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.
@+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 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.
| Stile | Attributo | Risultato |
|---|---|---|
| Colore del testo | android:textColor | Modifica il colore del testo inserito |
| Colore suggerimento | android:textColorHint | Modifica il colore del testo suggerimento |
| Sottolineatura | android:backgroundTint | Modifica il colore della linea sotto il campo |
| Dimensione carattere | android:textSize | Imposta la dimensione del testo in sp |
| Carattere | android:fontFamily | Applica 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
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.
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.
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.
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.
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
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