Passa ai contenuti principali

Android Studio - Spinner: personalizzazione

In questo articolo vedremo come personalizzare lo Spinner ad esempio inserire la lista degli elementi da un array contenuto nel file strings.xml oppure modificare il layout

LISTA ELEMENTI DA ARRAY NEL FILE strings.xml
Per inserire la lista degli elementi recuperata dal file strings.xml occorre creare un array al suo interno in questo modo:
<string-array name="list">
<item>Elemento 1</item>
<item>Elemento 2</item>
<item>Elemento 3</item>
<item>Elemento 4</item>
<item>Elemento 5</item>
<item>Elemento 6</item>
</string-array>
Ora all'interno del file MainActivity.kt bisogna inserire queste righe di codice:
//dichiarazione della variabile spinner di tipo Spinner
lateinit var spinner: Spinner
view raw spinner1_a.kt hosted with ❤ by GitHub
//associazione alla variabile spinner dell'oggetto Spinner con id=sp_option
//da inserire all'interno della funzione onCreate()
spinner = findViewById(R.id.sp_option)
view raw spinner1_b.kt hosted with ❤ by GitHub
Ora è necessario inserire queste righe di codice che permettono di popolare lo Spinner con l'array creato nel file strings.xml e gestire il click su di essi.
//dichiarazione della variabile options con la lista degli elementi dello Spinner
//recuperato da un array nel file strings.xml
val options = resources.getStringArray(R.array.list).toList()
//inserimento della lista all'interno dello spinner con layout di tipo: android.R.layout.simple_list_item_1
spinner.adapter = ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, options)
//gestione del click sui vari elementi dello Spinner
spinner.onItemSelectedListener = object: AdapterView.OnItemSelectedListener{
override fun onNothingSelected(parent: AdapterView<*>?) {
//inserire qui il codice da eseguire se non è stato selezionato alcun elemento
textResult.text = "Nessun elemento selezionato"
}
override fun onItemSelected(parent: AdapterView<*>?, view: View?, position: Int, id: Long) {
//inserire qui il codice da eseguire quando un elemento è stato selezionato
textResult.text = options.get(position)
}
}
Ecco come si presenta il file MainActivity.kt
package com.dm.tutorialspinner2
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.view.View //importazione della Classe: View
import android.widget.AdapterView //importazione della Classe: AdapterView
import android.widget.ArrayAdapter //importazione della Classe: ArrayAdapter
import android.widget.Spinner //importazione della Classe: Spinner
import android.widget.TextView
class MainActivity : AppCompatActivity() {
//dichiarazione della variabile spinner di tipo Spinner
lateinit var spinner: Spinner
//dichiarazione della variabile textResult di tipo TextView
lateinit var textResult: TextView
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
//associazione alla variabile spinner dell'oggetto Spinner con id=sp_option
spinner = findViewById(R.id.sp_option)
//associazione alla variabile textResult dell'oggetto TextView con id=text_option
textResult = findViewById(R.id.text_option)
//dichiarazione della variabile options con la lista degli elementi dello Spinner
//recuperato da un array nel file strings.xml
val options = resources.getStringArray(R.array.list).toList()
//inserimento della lista all'interno dello spinner con layout di tipo: android.R.layout.simple_list_item_1
spinner.adapter = ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, options)
//gestione del click sui vari elementi dello Spinner
spinner.onItemSelectedListener = object: AdapterView.OnItemSelectedListener{
override fun onNothingSelected(parent: AdapterView<*>?) {
//inserire qui il codice da eseguire se non è stato selezionato alcun elemento
textResult.text = "Nessun elemento selezionato"
}
override fun onItemSelected(parent: AdapterView<*>?, view: View?, position: Int, id: Long) {
//inserire qui il codice da eseguire quando un elemento è stato selezionato
textResult.text = options.get(position)
}
}
}
}


Download Project
Download file APK



PERSONALIZZAZIONE DEL LAYOUT
ESEMPIO 1:
In Android è possibile personalizzare il layout dello Spinner utilizzando quelli predefiniti di Android oppure creare il proprio layout.
In questo esempio vediamo come utilizzare quelli predefiniti, quindi è sufficiente modificare questa riga di codice
//inserimento della lista all'interno dello spinner con layout di tipo: android.R.layout.simple_list_item_1
spinner.adapter = ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, options)
con questa riga di codice:
//inserimento della lista all'interno dello spinner con layout di tipo: android.R.layout.simple_list_item_activated_1
spinner.adapter = ArrayAdapter<String>(this, android.R.layout.simple_list_item_activated_1, options)
Ecco il risultato

Il colore della selezione dell'elemento in questo caso è dato dal colore impostato come "colorAccent" nel file colors.xml


ESEMPIO 2:
Altra possibilità è quella di applicare uno stile allo Spinner utilizzando il file styles.xml
Per fare questo occorre aprire il file styles.xml ed aggiungere queste righe di codice:
<style name="spinner_style">
<item name="android:paddingLeft">0dp</item>
<item name="android:dropDownWidth">533dp</item>
<item name="android:showDividers">none</item>
<item name="android:dividerHeight">0dp</item>
<item name="android:popupBackground">#54ADCB</item>
<item name="android:dropDownHeight">70dp</item>
<item name="android:scrollbarAlwaysDrawVerticalTrack">true</item>
<item name="android:dropDownSelector">@android:color/white</item>
</style>
Queste righe di codice possono essere modificate a proprio piacimento e ne possono essere aggiunte altre oppure tolte quelle che non interessano.

Poi all'interno del layout occorre aggiungere questa riga di codice all'interno della View Spinner
style="@style/spinner_style"
Ecco come si presenta il file activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">
<Spinner
android:id="@+id/sp_option"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
style="@style/spinner_style"/>
<TextView
android:id="@+id/text_option"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
Ecco il risultato:


Download Project
Download file APK


Commenti

Post popolari in questo blog

Android Studio - Impostare lingua app

In questo articolo vedremo come poter selezionare la lingua all'interno della nostra app. Nel precedente articolo in cui si parlava del file string.xml , la lingua dell'app veniva selezionata automaticamente in base alle impostazioni del dispositivo, mentre qui vedremo come poter selezionare a proprio piacimento la lingua che dovrà avere la nostra app indipendentemente dall'impostazione del dispositivo. Per prima cosa creare il layout Ecco un esempio do come può essere il file activity_main.xml Ora creare le stringhe di testo all'interno del file string.xml Ora creare la traduzione del file string.xml nelle varie lingua come descritto in questo articolo Il risultato sarà una serie di file string.xml delle varie lingue impostate. Ora queste di seguito sono tre funzioni che servono per: selezione della lingua salvataggio della selezione nelle preferenze dell'app caricamento della lingua quando si avvia l'app Ecco come si presenta il file Main...

Android Studio - Rinominare il progetto

Rinominare il progetto Android Studio ATTENZIONE!: non eseguire questa procedura se l'app è stata pubblicata su Google Play Store Quando si vuole cambiare nome al progetto: nome cartella in cui è contenuto il progetto package name bisogna eseguire questi passaggi: Andare nella cartella dove è contenuto il progetto Creare una copia del progetto in questione Rinominare la cartella copiata con il nome dell'app (non usare spazi tra le parole) Ora è necessario dire ad Android Studio il nome del nuovo progetto  Aprire Android Studio Aprire il progetto creato in precedenza Una volta caricato il progetto cliccare Build Cliccare Clean Project Attendere che venga eseguito il processo di "pulitura" Cliccare ancora su Build Cliccare su Rebuild Project Attendere che venga ricostruito il progetto Ora aprire la cartella app fino a visualizzare la cartella java Cliccare sull'ingranaggio  Deselezionare la voce Compact Middle Packa...

Arduino - Lettura tensione potenziometro e display LCD

Leggere il valore di un poteziometro (parte 2) Oggi vedremo come leggere il valore in tensione di un potenziometro collegato al pin Analogico A0 di Arduino.