Questo codelab fa parte del corso Android Kotlin Fundamentals. Per ottenere il massimo valore da questo corso, ti consigliamo di seguire le codelab in sequenza. Tutti i codelab del corso sono elencati nella pagina di destinazione dei codelab Android Kotlin Fundamentals.
Cosa devi già sapere
- Creazione di un'app Android di base in Kotlin.
- Esecuzione di un'app per Android su un emulatore o su un dispositivo.
- Creazione di un layout lineare utilizzando l'editor di layout di Android Studio .
- Creazione di un'app semplice che utilizza
LinearLayout,TextView,ScrollViewe un pulsante con un gestore di clic.
Obiettivi didattici
- Come ottenere l'input dell'utente utilizzando una visualizzazione
EditText. - Come impostare il testo su una visualizzazione
TextViewutilizzando il testo della visualizzazioneEditText. - Come lavorare con
VieweViewGroup. - Come modificare la visibilità di un
View.
In questo lab proverai a:
- Aggiungi interattività all'app AboutMe, che proviene da un codelab precedente.
- Aggiungi un
EditTextin modo che l'utente possa inserire del testo. - Aggiungi un
Buttone implementa il relativo gestore dei clic.
In questo codelab, estendi l'app AboutMe per aggiungere l'interazione dell'utente. Vengono aggiunti un campo per il nickname, un pulsante FINE e una visualizzazione di testo per mostrare il nickname. Una volta che l'utente inserisce un nickname e tocca il pulsante FINE, la visualizzazione del testo viene aggiornata per mostrare il nickname inserito. L'utente può aggiornare di nuovo il nickname toccando la visualizzazione del testo.
|
|
In questa attività, aggiungi un campo di input EditText per consentire all'utente di inserire un nickname.
Passaggio 1: inizia
- Se non hai già l'app AboutMe di un precedente codelab, scarica il codice iniziale AboutMeInteractive-Starter. Si tratta dello stesso codice che hai completato in un codelab precedente.
- Apri il progetto AboutMeInteractive-Starter in Android Studio.
- Esegui l'app. Vedrai una visualizzazione del testo del nome, un'immagine a forma di stella e un lungo segmento di testo in una visualizzazione a scorrimento.

Tieni presente che l'utente non può modificare il testo.
Le app sono più interessanti se l'utente può interagire con loro, ad esempio se può inserire testo. Per accettare l'input di testo, Android fornisce un widget dell'interfaccia utente chiamato edit text. Definisci un testo modificabile utilizzando EditText, una sottoclasse di TextView. Un campo di modifica del testo consente all'utente di inserire e modificare l'input di testo, come mostrato nello screenshot di seguito.

Passaggio 2: aggiungi un EditText
- In Android Studio, apri il file di layout
activity_main.xmlnella scheda Design. - Nel riquadro Tavolozza, fai clic su Testo.

Ab TextView, che è unTextView, viene visualizzato nella parte superiore dell'elenco degli elementi di testo nel riquadro Tavolozza. Sotto Ab TextView sono presenti più visualizzazioniEditText.
Nel riquadro Palette, nota come l'icona perTextViewmostri le lettere Ab senza sottolineatura. Le iconeEditText, invece, mostrano Ab sottolineato. La sottolineatura indica che la visualizzazione è modificabile.
Per ciascuna delle visualizzazioniEditText, Android imposta attributi diversi e il sistema visualizza il metodo di input morbido appropriato (ad esempio una tastiera sullo schermo). - Trascina un testo modificabile PlainText nell'albero dei componenti e posizionalo sotto
name_texte soprastar_image.
- Utilizza il riquadro Attributi per impostare i seguenti attributi nella visualizzazione
EditText.
Attributo | Valore |
|
|
|
|
|
|
- Esegui l'app. Sopra l'immagine della stella, vedi un testo modificabile con il testo predefinito "Nome".

In questa attività, dai uno stile alla visualizzazione EditText aggiungendo un suggerimento, modificando l'allineamento del testo, impostando lo stile su NameStyle e impostando il tipo di input.
Passaggio 1: aggiungi il testo del suggerimento
- Aggiungi una nuova risorsa stringa per il suggerimento nel file
string.xml.
<string name="what_is_your_nickname">What is your Nickname?</string>- Utilizza il riquadro Attributi per impostare i seguenti attributi nella visualizzazione
EditText:
Attributo | Valore |
|
|
|
|
|
|
- Nel riquadro Attributi, rimuovi il valore
Namedall'attributotext. Il valore dell'attributotextdeve essere vuoto affinché venga visualizzato il suggerimento.
Passaggio 2: imposta l'attributo inputType
L'attributo inputType specifica il tipo di input che gli utenti possono inserire nella visualizzazione EditText. Il sistema Android mostra il campo di input e la tastiera sullo schermo appropriati, a seconda del tipo di input impostato.
Per visualizzare tutti i tipi di input possibili, nel riquadro Attributi, fai clic sul campo inputType o sui tre puntini … accanto al campo. Si apre un elenco che mostra tutti i tipi di input che puoi utilizzare, con il tipo di input attualmente attivo selezionato. Puoi selezionare più di un tipo di input.

Ad esempio, per le password, utilizza il valore textPassword. Il campo di testo nasconde l'input dell'utente.

Per i numeri di telefono, utilizza il valore phone. Viene visualizzato un tastierino numerico e l'utente può inserire solo numeri.

Imposta il tipo di input per il campo Nickname:
- Imposta l'attributo
inputTypesutextPersonNameper ilnickname_edittesto di modifica. - Nel riquadro Struttura dei componenti, nota un avviso
autoFillHints. Questo avviso non si applica a questa app e non rientra nell'ambito di questo codelab, quindi puoi ignorarlo. Se vuoi saperne di più sulla compilazione automatica, consulta la sezione Ottimizzare l'app per la compilazione automatica.
- Nel riquadro Attributi , verifica i valori dei seguenti attributi della visualizzazione
EditText:
Attributo | Valore |
|
|
|
|
|
|
|
|
|
|
|
|
| (vuoto) |
Un Button è un elemento UI che l'utente può toccare per eseguire un'azione. Un pulsante può essere costituito da testo, un'icona o entrambi.

In questa attività, aggiungi un pulsante FINE, che l'utente tocca dopo aver inserito un nickname. Il pulsante scambia la visualizzazione EditText con una visualizzazione TextView che mostra il nickname. Per aggiornare il nickname, l'utente può toccare la visualizzazione TextView.
Passaggio 1: aggiungi un pulsante FATTO
- Trascina un pulsante dal riquadro Palette nell'albero dei componenti. Posiziona il pulsante sotto il testo di modifica di
nickname_edit.

- Crea una nuova risorsa stringa denominata
done. Assegna alla stringa il valoreDone,
<string name="done">Done</string>- Utilizza il riquadro Attributi per impostare i seguenti attributi nella visualizzazione
Buttonappena aggiunta:
Attributo | Valori |
|
|
|
|
|
|
|
|
L'attributo layout_gravity centra la visualizzazione nel layout principale, LinearLayout.
- Modifica lo stile in
Widget.AppCompat.Button.Colored, uno degli stili predefiniti forniti da Android. Puoi selezionare lo stile dal menu a discesa o dalla finestra Risorse.
Questo stile cambia il colore del pulsante in quello del colore accento,colorAccent. Il colore secondario è definito nel fileres/values/colors.xml.
Il file colors.xml contiene i colori predefiniti per la tua app. Puoi aggiungere nuove risorse di colore o modificare quelle esistenti nel progetto in base ai requisiti della tua app.
File colors.xml di esempio:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="colorPrimary">#008577</color>
<color name="colorPrimaryDark">#00574B</color>
<color name="colorAccent">#D81B60</color>
</resources>Passaggio 2: applica uno stile al pulsante FINE
- Nel riquadro Attributi, aggiungi un margine superiore selezionando Layout_Margin > Top. Imposta il margine superiore su
layout_margin, definito nel filedimens.xml.
- Imposta l'attributo
fontFamilysurobotodal menu a discesa.
- Passa alla scheda Testo e verifica il codice XML generato per il pulsante appena aggiunto.
<Button
android:id="@+id/done_button"
style="@style/Widget.AppCompat.Button.Colored"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="@dimen/layout_margin"
android:fontFamily="@font/roboto"
android:text="@string/done" />Passaggio 3: modifica la risorsa colore
In questo passaggio, modifichi il colore intenso del pulsante in modo che corrisponda alla barra delle app dell'attività.
- Apri
res/values/colors.xmle modifica il valore dicolorAccentin#76bf5e.
<color name="colorAccent">#76bf5e</color>Puoi vedere il colore corrispondente al codice esadecimale nel margine sinistro dell'editor di file.

Nota la modifica del colore del pulsante nell'editor di progettazione.
- Esegui l'app. Dovresti visualizzare un pulsante FINE con stile sotto il testo di modifica.

Dopo che l'utente ha inserito un nickname e ha toccato il pulsante FINE, il nickname viene visualizzato in una visualizzazione TextView. In questa attività, aggiungi una visualizzazione di testo con uno sfondo colorato. La visualizzazione del testo mostra il nickname dell'utente sopra star_image.
Passaggio 1: aggiungi un TextView per il nickname
- Trascina una visualizzazione di testo dal riquadro Palette nell'albero dei componenti. Posiziona la visualizzazione del testo sotto
done_buttone soprastar_image.
- Utilizza il riquadro Attributi per impostare i seguenti attributi per la nuova visualizzazione
TextView:
Attributo | Valore |
|
|
|
|
|
|
Passaggio 2: modifica la visibilità di TextView
Puoi mostrare o nascondere le visualizzazioni nella tua app utilizzando l'attributo visibility. Questo attributo accetta uno dei tre valori seguenti:
visible: La visualizzazione è visibile.Invisible: nasconde la visualizzazione, ma questa occupa comunque spazio nel layout.gone: nasconde la visualizzazione e non occupa spazio nel layout.
- Nel riquadro Attributi, imposta la
visibilitydella visualizzazione di testonickname_textsugone, perché non vuoi che l'app mostri inizialmente questa visualizzazione di testo.
Tieni presente che, man mano che modifichi l'attributo nel riquadro Attributi, la visualizzazionenickname_textscompare dall'editor di progettazione. La visualizzazione è nascosta nell'anteprima del layout. - Modifica il valore dell'attributo
textdella visualizzazionenickname_textin una stringa vuota.
Il codice XML generato per questo TextView dovrebbe essere simile a questo:
<TextView
android:id="@+id/nickname_text"
style="@style/NameStyle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textAlignment="center"
android:visibility="gone"
android:text="" />L'anteprima del layout dovrebbe avere un aspetto simile al seguente:

Un gestore di clic sull'oggetto Button (o su qualsiasi visualizzazione) specifica l'azione da eseguire quando viene toccato il pulsante (visualizzazione). La funzione che gestisce l'evento di clic deve essere implementata nel Activity che ospita il layout con il pulsante (visualizzazione).
Il listener di clic ha genericamente questo formato, in cui la visualizzazione passata è quella che ha ricevuto il clic o il tocco.
private fun clickHandlerFunction(viewThatIsClicked: View) {
// Add code to perform the button click event
}Puoi collegare la funzione di ascolto dei clic agli eventi di clic sui pulsanti in due modi:
- Nel layout XML, puoi aggiungere l'attributo
android:onClickall'elemento<Button>. Ad esempio:
<Button
android:id="@+id/done_button"
android:text="@string/done"
...
android:onClick="clickHandlerFunction"/>OPPURE
- Puoi farlo in modo programmatico in fase di runtime, in
onCreate()diActivity, chiamandosetOnClickListener. Ad esempio:
myButton.setOnClickListener {
clickHanderFunction(it)
}In questa attività, aggiungi un listener di clic per done_button in modo programmatico. Aggiungi il listener di clic nell'attività corrispondente, ovvero MainActivity.kt.
La funzione di ascolto dei clic, chiamata addNickname, farà quanto segue:
- Recupera il testo dalla modifica
nickname_edit. - Imposta il testo nella visualizzazione di testo
nickname_text. - Nascondi il testo di modifica e il pulsante.
- Visualizza il nickname
TextView.
Passaggio 1: aggiungi un listener di clic
- In Android Studio, nella cartella
java, apri il fileMainActivity.kt. - In
MainActivity.kt, all'interno della classeMainActivity, aggiungi una funzione chiamataaddNickname. Includi un parametro di input chiamatoviewdi tipoView. Il parametroviewè ilViewsu cui viene chiamata la funzione. In questo caso,viewsarà un'istanza del pulsante FINE.
private fun addNickname(view: View) {
}- All'interno della funzione
addNickname, utilizzafindViewById()per ottenere un riferimento al testo di modificanickname_edite alla visualizzazione del testonickname_text.
val editText = findViewById<EditText>(R.id.nickname_edit)
val nicknameTextView = findViewById<TextView>(R.id.nickname_text)- Imposta il testo nella visualizzazione di testo
nicknameTextViewsul testo inserito dall'utente ineditText, recuperandolo dalla proprietàtext.
nicknameTextView.text = editText.text- Nascondi la visualizzazione del nickname
EditTextimpostando la proprietàvisibilitydieditTextsuView.GONE.
In un'attività precedente, hai modificato la proprietà visibility utilizzando l'editor layout. Qui fai la stessa cosa a livello di programmazione.
editText.visibility = View.GONE- Nascondi il pulsante FINE impostando la proprietà
visibilitysuView.GONE. Hai già il riferimento del pulsante come parametro di input della funzione,view.
view.visibility = View.GONE- Alla fine della funzione
addNickname, rendi visibile la visualizzazioneTextViewimpostando la proprietàvisibilitysuView.VISIBLE.
nicknameTextView.visibility = View.VISIBLEPassaggio 2: collega il listener di clic al pulsante FINE
Ora che hai una funzione che definisce l'azione da eseguire quando viene toccato il pulsante FINE, devi collegare la funzione alla visualizzazione Button.
- In
MainActivity.kt, alla fine della funzioneonCreate(), ottieni un riferimento alla visualizzazione FINEButton. Utilizza la funzionefindViewById()e chiamasetOnClickListener. Passa un riferimento alla funzione click-listener,addNickname().
findViewById<Button>(R.id.done_button).setOnClickListener {
addNickname(it)
}Nel codice precedente, it si riferisce a done_button, ovvero la visualizzazione passata come argomento.
- Esegui l'app, inserisci un nickname e tocca il pulsante FINE. Nota come il testo di modifica e il pulsante vengono sostituiti dalla visualizzazione del testo del nickname.
|
|
Tieni presente che la tastiera è ancora visibile anche dopo che l'utente ha toccato il pulsante FINE. Questo comportamento è quello predefinito.
Passaggio 3: nascondi la tastiera
In questo passaggio, aggiungi il codice per nascondere la tastiera dopo che l'utente tocca il pulsante FINE.
- In
MainActivity.kt, alla fine della funzioneaddNickname(), aggiungi il seguente codice. Per saperne di più sul funzionamento di questo codice, consulta la documentazionehideSoftInputFromWindow.
// Hide the keyboard.
val inputMethodManager = getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
inputMethodManager.hideSoftInputFromWindow(view.windowToken, 0)- Esegui di nuovo l'app. Tieni presente che dopo aver toccato FINE,la tastiera viene nascosta.
|
|
L'utente non può modificare il nickname dopo aver toccato il pulsante FINE. Nella prossima attività, renderai l'app più interattiva e aggiungerai una funzionalità che consenta all'utente di aggiornare il nickname.
In questa attività, aggiungi un listener di clic alla visualizzazione del testo del nickname. Il listener di clic nasconde la visualizzazione del testo del nickname, mostra il testo di modifica e il pulsante FINE.
Passaggio 1: aggiungi un listener di clic
- In
MainActivity, aggiungi una funzione di listener di clic chiamataupdateNickname(view: View)per la visualizzazione del testo del nickname.
private fun updateNickname (view: View) {
}- All'interno della funzione
updateNickname, ottieni un riferimento al testo di modificanickname_edite un riferimento al pulsante FINE . A tal fine, utilizza il metodofindViewById().
val editText = findViewById<EditText>(R.id.nickname_edit)
val doneButton = findViewById<Button>(R.id.done_button)- Alla fine della funzione
updateNickname, aggiungi il codice per mostrare il testo di modifica, il pulsante FINE e nascondere la visualizzazione del testo.
editText.visibility = View.VISIBLE
doneButton.visibility = View.VISIBLE
view.visibility = View.GONE- In
MainActivity.kt, alla fine della funzioneonCreate(), chiamasetOnClickListenernella visualizzazione di testonickname_text. Passa un riferimento alla funzione del listener di clic, ovveroupdateNickname().
findViewById<TextView>(R.id.nickname_text).setOnClickListener {
updateNickname(it)
}- Esegui l'app. Inserisci un nickname, tocca il pulsante FINE, quindi tocca la visualizzazione del nickname
TextView. La visualizzazione del nickname scompare e diventano visibili il testo di modifica e il pulsante FINE.
Tieni presente che, per impostazione predefinita, la visualizzazione EditText non è attiva e la tastiera non è visibile. Per l'utente è difficile capire che la visualizzazione del testo del nickname è selezionabile. Nella prossima attività, aggiungi lo stato attivo e uno stile alla visualizzazione del testo del nickname.
Passaggio 2: imposta lo stato attivo sulla visualizzazione EditText e mostra la tastiera
- Alla fine della funzione
updateNickname, imposta lo stato attivo sulla visualizzazioneEditText. Utilizza il metodorequestFocus().
// Set the focus to the edit text.
editText.requestFocus()- Alla fine della funzione
updateNickname, aggiungi il codice per rendere visibile la tastiera.
// Show the keyboard.
val imm = getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
imm.showSoftInput(editText, 0)Passaggio 3: aggiungi un colore di sfondo alla visualizzazione TextView del nickname
- Imposta il colore di sfondo della visualizzazione del testo
nickname_textsu@color/colorAccente aggiungi un padding inferiore di@dimen/small_padding. Queste modifiche fungeranno da suggerimento per l'utente che la visualizzazione del testo del nickname è selezionabile.
android:background="@color/colorAccent"
android:paddingBottom="@dimen/small_padding"- Esegui l'app finale. Il testo di modifica è attivo, il nickname viene visualizzato nel testo di modifica e la visualizzazione del testo del nickname è formattata.
|
|
Ora mostra la tua app interattiva AboutMe a un amico.
Progetto Android Studio: AboutMeInteractive
- Lo strumento Layout Editor in Android Studio è un editor di progettazione visiva. Puoi utilizzare l'editor di layout per creare il layout della tua app trascinando gli elementi dell'interfaccia utente nel layout.
EditTextè un elemento dell'interfaccia utente che consente all'utente di inserire e modificare il testo.- Un
Buttonè un elemento UI che l'utente può toccare per eseguire un'azione. Un pulsante può essere costituito da testo, un'icona o entrambi.
Listener di clic
- Puoi fare in modo che qualsiasi
Viewrisponda a un tocco aggiungendo un listener di clic. - La funzione che definisce il listener di clic riceve l'elemento
Viewsu cui viene fatto clic.
Puoi collegare una funzione di ascolto dei clic a un View in due modi:
- Nel layout XML, aggiungi l'attributo
android:onClickall'elemento<View>. - A livello di programmazione, utilizza la funzione
setOnClickListener(View.OnClickListener)nelActivitycorrispondente.
Corso Udacity:
Documentazione per sviluppatori Android:
Questa sezione elenca i possibili compiti a casa per gli studenti che seguono questo codelab nell'ambito di un corso guidato da un insegnante. Spetta all'insegnante:
- Assegna i compiti, se richiesto.
- Comunica agli studenti come inviare i compiti.
- Valuta i compiti a casa.
Gli insegnanti possono utilizzare questi suggerimenti nella misura che ritengono opportuna e sono liberi di assegnare qualsiasi altro compito a casa che ritengono appropriato.
Se stai seguendo questo codelab in autonomia, sentiti libero di utilizzare questi compiti per casa per mettere alla prova le tue conoscenze.
Rispondi a queste domande
Domanda 1
Di che cosa è sottoclasse EditText?
ViewLinearLayoutTextViewButton
Domanda 2
Quale dei seguenti valori dell'attributo visibility, se impostato in una vista, fa sì che la vista sia nascosta e non occupi spazio nel layout?
visibleInvisiblegonehide
Domanda 3
Per le visualizzazioni EditText, non è consigliabile fornire suggerimenti, perché questi ultimi ingombrano il campo di input. Vero o falso?
- Vero
- Falso
Domanda 4
Quale delle seguenti affermazioni è vera in merito alle visualizzazioni di Button?
- Una visualizzazione
Buttonè un gruppo di visualizzazioni. - Puoi avere solo tre visualizzazioni
Buttonper schermata. - Le visualizzazioni
Buttonsono cliccabili e, quando si fa clic, il listener di clic collegato esegue un'azione. Buttonè un'estensione diImageView.
Inizia la lezione successiva:
Per i link ad altri codelab di questo corso, consulta la pagina di destinazione dei codelab di Android Kotlin Fundamentals.


(centro)
(centro)

