Presentiamo ora un’altra view molto utilizzata nelle applicazioni ovvero l’oggetto EditText il quale permette l’immissione di testo da parte dell’utente. Quando l’utente clicca su un oggetto di tipo EditText, infatti, appare automaticamente una tastiera virtuale sullo schermo del dispositivo che permette l’immissione del testo.
Come detto la tastiera appare in maniera automatica non appena clicchiamo sull’oggetto EditText, ma è anche necessario farla sparire non appena l’utente termina l’immisione del testo. Purtroppo questo comportamento non è implementato direttamente nella tastiera, ma è necessario aggiungere un bottone particolare alla cui pressione la tastierà viene rimossa dallo schermo.
Andiamo dunque ad inserire all’interno della finestra di progettazione un oggetto EditText utilizzando l’interfaccia grafica oppure scrivendo direttamente il codice sorgente XML.
Personalizzare l’EditText
Gli oggetti di tipo EditText possono essere personalizzati nella struttura al fine di renderli conformi alle nostre esigenze. Un tipo di personalizzazione molto comune consiste nella definizione del tipo di caratteri che possono essere digitati dall’utente. Possiamo, ad esempio, prevedere che l’inserimento riguardi caratteri numerici. A tal fine sarà necessario agire sulla proprietà Input Type presente all’interno dell’interfaccia grafica del main.xml. Selezionando number l’effetto consiste nel far apparire la tastiera virtuale dei numeri invece che quella con le lettere dell’alfabeto che compare di default. Un altro settaggio molto comune è quello di associare all’Input Type il valore password per sostituire ai caratteri inseriti dall’utente degli asterischi.
Nel caso in cui si voglia lavorare direttamente utilizzando il linguaggio XML è necessario aggiungere nel listato il seguente attributo:
/* campo tipo numerico */
android:inputType="number"
/* campo tipo password */
android:inputType="password"
Altro attributo molto utilizzato negli oggetti di tipo EditText è hint il quale consente di inserire un testo di default nel campo di testo da mostrare prima che questo venga attivato:
android:hint="@string/Inserisci il tuo testo"
questo codice, in sostanza, ha l’effetto di mostrare all’utente un testo di default all’interno dell’EditText avente, solitamente, natura esplicativa circa i dati da immettere.
Impostato il nostro oggetto EditText, all’interno del nostro file activity_main.xml avremo qualcosa del genere:
<EditText android:id="@+id/mioEditText"
android:hint="@string/Quanti anni hai?"
android:inputType="number"
android:layout_height="wrap_content"
android:layout_width="wrap_content">
</EditText>
Chiudere la tastiera virtuale
Fatto ciò spostiamoci nel file .java e andiamo a dichiarare un attributo di tipo EditText e poi effettuiamo l’associazione con gli elementi del file activity_main.xml seguendo le modalità discusse abbondantemente nei capitoli precedenti.
Siamo pronti adesso ad eseguire la nostra applicazione sul simulatore. Cliccando sull’oggetto EditText noteremo che non c’è modo di togliere dallo schermo la tastiera una volta completato il lavoro di inserimento dati. Per ottenere il comportamento voluto dobbiamo inserire solamente le seguenti linee di codice:
mioEditText.setImeOptions(EditorInfo.IME_ACTION_DONE);
dove mioEditText indica il nome con il quale è stato dichiarato il nostro oggetto EditText.
Se adesso lanciamo nuovamente la nostra applicazione vedremo che la tastiera che verrà mostrata sarà arrichita dal tasto Done comparso grazie alla linea di codice vista sopra mediante l’invocazione del metodo setImeOptions il quale ha l’effetto di settare un IME nella tastiera.
Ma che cosa è un IME? Un input method (IME) implementa un particolare modello di interazione che l’utente può utilzzare (nel nostro caso il tasto Done). Il tipo di IME che verrà aggiunto alla nostra tastiera è passato come argomento al metodo setImeOptions, questo perchè è possibile scegliere, oltre al tasto Done altri IME da inserire nella tastiera. Elenchiamo quelli più utilizzati:
- IME_ACTION_GO: inserisce un bottone che ha l’effetto di generare un’azione precisa oltre alla chiusura della tastiera. Per esempio questo tipo di IME viene aggiunto alle tastiere dove deve essere immesso un URL e una volta cliccato il tasto Go viene fatta la richiesta HTML al server ospitante la risorsa indicata dall’utente.
- IME_ACTION_NEXT: utilizzato, per esempio in un form di registrazione, per passare alla compilazione del campo successivo.
- IME_ACTION_SEND: viene utilizzato per inviare il testo inserito nell’EditText ad un determinato servizio come per esempio un’applicazione di invio messaggi.
Bisogna sottolineare che l’uso degli IME deve essere fatto in maniera esclusiva, ovvero è possibile inserire un unico IME ad una tastiera.