2015-10-15 12 views
28

Come modificare l'icona FAB in un'attività durante il runtime. Ho questo codice ->android: modifica dinamica dell'icona FAB (Floating Action Button) dal codice

FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fabMainActivity); 

So che questo è possibile utilizzando fab.setBackgroundDrawable(); ma io sono un novizio di Android, non capisco come fare questo.

Qualsiasi aiuto sarà molto apprezzato.

Grazie

+0

Hai provato 'fab. setBackground'? –

+0

Non riesco a farlo .. come previsto un drawable .. e idk come fare un drawable ?? –

+4

Hai aggiunto un'icona nella cartella Disegnabile? se sì, basta passare 'R.drawable. 'al metodo' setBackground' altrimenti prima aggiungi l'icona alla cartella disegnabile, quindi fai lo stesso –

risposta

51

Cambiare FloatingActionButton fonte:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { 
      floatingActionButton.setImageDrawable(getResources().getDrawable(R.drawable.ic_full_sad, context.getTheme())); 
     } else { 
      floatingActionButton.setImageDrawable(getResources().getDrawable(R.drawable.ic_full_sad)); 
    } 

Questo può essere sostituito da seguente codice dalla libreria di supporto invece:

floatingActionButton.setImageDrawable(ContextCompat.getDrawable(getContext(), R.drawable.ic_full_sad)); 
+1

Cerca di evitare' getApplicationContext' il più possibile – zozelfelfo

+0

@zozelfelfo perché è così? – SaKet

+5

Questo non è necessariamente vero. Dipende da ciò che stai cercando di realizzare. Il contesto di attività può causare perdite di memoria a seconda di come lo si utilizza. Tipicamente è il contesto di attività che è problematico perché può causare perdite di memoria. Se l'attività muore e un altro oggetto ha un riferimento a tale attività tramite il contesto, non può essere sottoposto a garbage collection. Tuttavia, ci sono alcuni casi in cui si desidera utilizzare il contesto dell'attività nel contesto dell'app, [ex] (http://developer.android.com/reference/android/content/ContextWrapper.html#getApplicationContext%28%29). –

12

O si utilizza la libreria di supporto:

floatingActionButton.setImageDrawable(ContextCompat.getDrawable(getContext(), R.drawable.ic_full_sad)); 
+1

Questo è il modo corretto. – Iqbal

10

Se si utilizza la libreria di supporto:

floatingActionButton.setImageResource(R.drawable.icon_name) 
+0

Questa dovrebbe essere la risposta contrassegnata poiché con questo uso è possibile utilizzare i vettori –

0

quello che sto usando come segue,

FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab_btn); 

// State 1 -on 

fab.setImageDrawable(ContextCompat.getDrawable(getActivity(), R.drawable.fab_on)); 

// State 2 - off 

fab.setImageDrawable(ContextCompat.getDrawable(getActivity(), R.drawable.fab_off)); 
0

Si supponga che si intende utilizzare l'immagine come sfondo ic_arrow_forward.png del fab:

fab.setImageResource(R.mipmap.ic_arrow_forward);

Problemi correlati