2012-07-28 23 views
7

Aktualnie wdrażam obsługę motywów dla mojej aplikacji, a jej częścią zmienia się ikona aplikacji paska zadań. Chcę użyć ciemnej ikony, gdy wybrana jest opcja Holo Light. Wszystko odbywa się w metodzie, z wyjątkiem części, w której ustawiono ikonę aplikacji paska działań. Kod, który próbuję użyć, to:Zmiana ikony paska akcji

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

"Nie ma takiego odniesienia, który jest tutaj dostępny" to błąd, który dostaję. Jak to zrobić poprawnie?

Przy okazji moja minSdkVersion ma 14, więc nie ma nic w stylu sherlock.

Odpowiedz

18
getActionBar(); 

Rzucasz pasek akcji tam. getActionBar() zwraca instancję ActionBar, którą następnie należy wywołać pod numerem setIcon(). Podobnie jak:

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

'setIcon' jest obsługiwany na poziomie API 14 i wyższym. Możesz także ustawić logo ActionBar w pliku manifestu, jak wyjaśniono tutaj: http://stackoverflow.com/a/6351736/1182823 –

+0

To rozwiązanie nie działa podczas korzystania z obsługiwanej biblioteki v7, w której używam getSupportActionBar(); - Jakieś sugestie? dzięki –

0

Musisz dodać losowanie, które chcesz odwołać do swojego folderu drawable/ pod numerem res/.

edytuj: W folderze instalacyjnym systemu Android jest wiele zdjęć seryjnych. Prawdopodobnie możesz go tam znaleźć.

+0

Już dodaje ikonę, a nie ów problem. Autouzupełnianie może zlokalizować moją ikonę bez żadnych problemów. Otrzymuję ten sam błąd, niezależnie od tego, które z moich ulubionych rysunków mam na myśli. Próbowałem błędnie użyć mojego zasobu do rysowania i wystąpił ten sam błąd, ale zamiast oznaczenia czerwonego kodu "setIcon", literówka z błędem została oznaczona na czerwono. Jest to dowód na to, że moi eksliści i mój IDE mogą go znaleźć. – SweSnow

0

Istniejąca odpowiedź jest bardzo poprawna. Istnieje jednak również alternatywa. Minimalnym podejściem byłoby użycie:

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

Odblokowuje pracę. :)

Szczegóły techniczne: Ponieważ getActionBar() domyślnie zwraca obiekt, można go bezpośrednio manipulować bez konieczności otrzymywania go bezpośrednio w obiekcie wewnątrz obiektu.

4

Choć jest to nieco spóźniona odpowiedź, ale pomyślałem, że może się przydać.

Od wewnątrz działania: dla poziomu API 14 lub wyższy:

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

Na niższym poziomie API trzeba rozszerzyć ActionBarActivity, a następnie:

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

od wewnątrz fragmentu : Dla poziomu API 14 lub wyższego:

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

Na niższym poziomie API możemy użyć (aktywność musi przedłużyć ActionBarActivity):

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

I w obu przypadkach mamy zadzwonić setDisplayShowHomeEnabled (true) przed ustawieniem ikony lub logo.

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

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

Zadzwonienie pod numer setIcon było dla mnie niewystarczające.

Wcześniej musiałem przełączyć wyświetlanie z działalności logo ikony działalności:

actionBar.setDisplayUseLogoEnabled(false); 

różnic między ikoną działalności i logo zobaczyć Android icon vs logo.

0

Używam tego do mojego użytku i działa dla mnie. Nadzieję, że to pomoże wszystkim

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

Spróbuj

setSupportActionBar(toolbar); 
    if (getSupportActionBar() != null) 
    getSupportActionBar().setIcon(R.drawable.your_icon); 
Powiązane problemy