2012-07-28 6 views
7

Attualmente sto implementando il supporto per i temi per la mia applicazione e una parte di essa sta modificando l'icona dell'app della barra delle azioni. Voglio usare un'icona scura quando è selezionato Holo Light. Tutto è fatto nel metodo tranne per la parte in cui è impostata l'icona dell'app della barra delle azioni. Il codice che im cercando di utilizzare è:Modifica dell'icona della barra delle azioni

getActionBar(); 
ActionBar.setIcon(R.drawable.my_icon); 

"Non v'è alcun riferimento ad avavible qui" è l'errore che sto ricevendo. Come dovrebbe essere fatto correttamente?

BTW my minSdkVersion è 14, quindi nessuna barra delle azioni da sherlock.

risposta

18
getActionBar(); 

Stai lanciando la barra delle azioni proprio lì. getActionBar() restituisce un'istanza di ActionBar, che è quindi necessario chiamare setIcon() su. Così:

ActionBar actionBar = getActionBar(); 
actionBar.setIcon(R.drawable.my_icon); 
+4

'setIcon' è supportato in livello API 14 e versioni successive. È inoltre possibile impostare il logo ActionBar nel file manifest come spiegato qui: http://stackoverflow.com/a/6351736/1182823 –

+0

Questa soluzione non funziona quando si utilizza la libreria supportata v7 in cui utilizzo getSupportActionBar(); - Qualche suggerimento? Grazie –

0

È necessario aggiungere il drawable che si desidera fare riferimento nella cartella drawable/ sotto res/.

modifica: Nella cartella di installazione di Android ci sono molte immagini da utilizzare. Probabilmente lo troverai lì.

+0

Ho già aggiunto l'icona, quello non è il problema. Autocompleate potrebbe individuare la mia icona senza problemi. Ricevo lo stesso errore, non importa quale dei miei drawable esistenti mi riferisca. Ho provato a scrivere male la mia risorsa drawable di proposito e ho ottenuto lo stesso errore ma invece di contrassegnare il codice "setIcon" in rosso, il drawable scritto in modo errato è stato contrassegnato in rosso. Questa è la prova che i miei exsisti disegnabili e il mio IDE possono trovarlo. – SweSnow

0

La risposta esistente è molto corretta. C'è, tuttavia, anche un'alternativa. Un approccio minimo sarebbe quello di utilizzare

getActionBar().setIcon(R.drawable.my_icon);

ottiene il vostro lavoro fatto subito. :)

Dettagli tecnici: Poiché getActionBar() per impostazione predefinita restituisce un oggetto, è possibile manipolarlo direttamente senza doverlo ricevere esplicitamente in un oggetto in ambito.

4

Anche se è un po 'tardi risposta, ma ho pensato che potrebbe essere utile.

Dall'interno un'attività: Per API di livello 14 o superiore:

getActionBar().setIcon(R.drawable.my_icon); 

Per API di livello inferiore abbiamo estendere ActionBarActivity e quindi:

getSupportActionBar().setIcon(R.drawable.my_icon); 

dall'interno di un frammento : Per livello API 14 o successivo:

getActivity().getActionBar().setIcon(R.drawable.my_icon); 

Per livello di API inferiore possiamo usare (l'attività deve estendersi ActionBarActivity):

((ActionBarActivity)getActivity()).getSupportActionBar().setIcon(R.drawable.my_icon); 

E in entrambi i casi dobbiamo chiamare setDisplayShowHomeEnabled (true) prima di impostare l'icona o il logo.

((ActionBarActivity)getActivity()).getSupportActionBar().setDisplayShowHomeEnabled(true); 

((ActionBarActivity)getActivity()).getSupportActionBar().setIcon(R.drawable.my_icon); 
0

Chiamare a setIcon non è stato sufficiente per me.

Prima di allora, ho dovuto passare dalla visualizzazione attività di logo per l'icona di attività:

actionBar.setDisplayUseLogoEnabled(false); 

Per le differenze tra l'icona di attività e il logo vedere Android icon vs logo.

0

Sto usando questo per il mio uso e funziona per me. Spero che questo aiuto tutto

actionBar.setDisplayHomeAsUpEnabled(true); 
actionBar.setHomeAsUpIndicator(R.drawable.icon); 
0

Prova questa

setSupportActionBar(toolbar); 
    if (getSupportActionBar() != null) 
    getSupportActionBar().setIcon(R.drawable.your_icon);