2015-10-15 12 views
28

Jak zmienić ikonę FAB w działaniu w czasie wykonywania. Mam ten kod ->android: dynamicznie zmienia ikonę FAB (zmiennoprzecinkowy przycisk) z kodu

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

wiem, że to jest możliwe przy użyciu fab.setBackgroundDrawable(); ale jestem nowicjuszem na android, nie rozumiem, jak to zrobić.

Każda pomoc będzie bardzo ceniona.

Dzięki

+0

Czy próbowałeś "fab. setBackground'? –

+0

Nie jestem w stanie tego zrobić ... ponieważ oczekuje się losowania .. i idk jak zrobić wyciągnięcie? –

+4

Czy dodałeś ikonę w folderze Drawable? jeśli tak, po prostu przekazuj 'R.drawable. Metoda 'to' setBackground' inaczej najpierw dodaj ikonę do folderu do rysowania, następnie wykonaj tę samą –

Odpowiedz

51

Zmiana FloatingActionButton źródło:

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)); 
    } 

ten może być zastąpiony przez następujący kod z biblioteki wsparcia Zamiast:

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

Staraj się unikać' getApplicationContext' jak najwięcej – zozelfelfo

+0

@zozelfelfo dlaczego tak jest? – SaKet

+5

To niekoniecznie musi być prawda. To zależy od tego, co próbujesz osiągnąć. Kontekst działania może powodować wycieki pamięci w zależności od tego, jak go używasz. Zazwyczaj jest to kontekst działania, który jest kłopotliwy, ponieważ może powodować wycieki pamięci. Jeśli działanie obumiera, a inny obiekt odwołuje się do tego działania za pośrednictwem kontekstu, nie można go odzyskać. Jednak są pewne przypadki, gdy chcesz użyć kontekstu działania w kontekście aplikacji, [ex] (http://developer.android.com/reference/android/content/ContextWrapper.html#getApplicationContext%28%29). –

12

Albo użyć biblioteki wsparcia:

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

To jest poprawny sposób. – Iqbal

10

Jeśli używasz Bibliotekę Support:

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

Powinna to być zaznaczona odpowiedź, ponieważ przy użyciu tego można używać wektorów –

0

Co Używam następująco,

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

Załóżmy, że będziesz korzystać z ic_arrow_forward.png obraz jako Fab w tle:

fab.setImageResource(R.mipmap.ic_arrow_forward);

Powiązane problemy