Passa ai contenuti principali

Android Studio - ActionBar: modifica icona da codice

In questo articolo vedremo come sia possibile modificare una icona all'interno dell'ActionBar tramite codice.

Questa operazione è utile quando si ha una icona nell'ActionBar e deve essere modificata l'icona in base all'operazione che è stata eseguita, ad esempio l'aggiunta di una impostazione ai preferiti: se l'impostazione non è aggiunta ai preferiti si avrà una icona, mentre se si aggiunge l'impostazione ai preferiti l'icona cambierà di conseguenza.
Per prima cosa occorre creare due icone ed inserirle nel progetto come descritto in questo articolo
Una volta create le icone dobbiamo modificare oppure creare il file menu.xml
<?xml version="1.0" encoding="utf-8"?>
<menu
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/action_one"
android:icon="@drawable/ic_fav_off"
app:showAsAction="always"
android:orderInCategory="100"
android:title="Elemento 1"/>
<item
android:id="@+id/action_two"
android:orderInCategory="101"
android:title="Elemento 2"/>
<item
android:id="@+id/action_three"
android:orderInCategory="102"
android:title="Elemento 3"/>
</menu>
view raw menu_ab3.kt hosted with ❤ by GitHub
Alla riga 8 è stata impostata l'icona dei preferiti disattivata mentre,
alla riga 9 è stato impostato l'attributo di visualizzare sempre questa voce di menu

Ora bisogna creare il codice che permette di cambiare icona
//dichiarazione della variabile ti tipo Menu
private var myiconmenu: Menu? = null
view raw actb3_1.kt hosted with ❤ by GitHub
//assegnazione del menu alla variabile myiconmenu
//all'interno della funzione onCreateOptionsMenu
this.myiconmenu = menu
view raw actb3_2.kt hosted with ❤ by GitHub
//questo è per poter modificare l'icona
//da inserire nell'evento che gestisce il clic della voce di menu
myiconmenu!!.getItem(0).setIcon(R.drawable.ic_fav_on)
view raw actb3_3.kt hosted with ❤ by GitHub
Ecco come si presenta il file MainActivity.kt
package com.dm.tutorialactionbartoolbar2
import android.os.Bundle
import android.view.Menu //Importazione della Classe: Menu
import android.view.MenuItem //Importazione della Classe: MenuItem
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
class MainActivity : AppCompatActivity() {
//dichiarazione della variabile ti tipo Menu
private var myiconmenu: Menu? = null
//dichiarazione variabile di tipo Boolean
//per verificare lo stato del pulsante in ActionBar
private var stateicon: Boolean? = false
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
}
override fun onCreateOptionsMenu(menu: Menu): Boolean {
// Inflate the menu; questo aggiunge elementi alla barra delle azioni se è presente.
menuInflater.inflate(R.menu.menu, menu)
//assegnazione del menu alla variabile myiconmenu
//all'interno della funzione onCreateOptionsMenu
this.myiconmenu = menu
return true
}
override fun onOptionsItemSelected(item: MenuItem): Boolean {
// Gestisci i clic degli elementi della barra delle azioni qui.
when (item.itemId) {
R.id.action_one -> {
//se lo stato del pulsante è falso cambia icona ed imposta lo stato pulsante a vero
if(stateicon == false) {
//questo è per poter modificare l'icona
myiconmenu!!.getItem(0).setIcon(R.drawable.ic_fav_on)
//altro codice che viene eseguito
stateicon = true
Toast.makeText(this, "Aggiunto ai preferiti", Toast.LENGTH_LONG).show()
}
//se lo stato del pulsante è vero cambia icona ed imposta lo stato pulsante a falso
else
{
//questo è per poter modificare l'icona
myiconmenu!!.getItem(0).setIcon(R.drawable.ic_fav_off)
//altro codice che viene eseguito
stateicon = false
Toast.makeText(this, "Rimosso dai preferiti", Toast.LENGTH_LONG).show()
}
}
R.id.action_two -> {
Toast.makeText(this, "Elemento 2 premuto", Toast.LENGTH_LONG).show()
}
R.id.action_three -> {
Toast.makeText(this, "Elemento 3 premuto", Toast.LENGTH_LONG).show()
}
else -> super.onOptionsItemSelected(item)
}
return true
}
}

Ecco un video dimostrativo


Download Project
Download file APK
Visualizza su


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...

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.

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...