2012-02-01 37 views
25

Chciałbym dynamicznie zmienić ikonę "domu" w pasku akcji. Można to łatwo zrobić w wersji 14 za pomocą ActionBar.setIcon (...), ale i tak nie mogę tego znaleźć w poprzednich wersjach.Android: dynamicznie zmieniać ikonę ActionBar?

+0

Czy coś się stało, kiedy zadzwonić 'setIcon'? A jeśli próbujesz dokonać rzeczy w dowolnym przedmio-stwie Honeycomb, powinieneś rzucić okiem na [ActionBarSherlock.] (Http://actionbarsherlock.com/) – adneal

+0

Używam dostosowanego komponentu ActionBar-esque dla pre-v11 (podobny do ActionBarSherlock). Dotyczy to v11-v13 (plaster miodu). Kiedy wołam setIcon w strukturze plastra miodu, otrzymuję wyjątek methodnfound. – ab11

+0

setIcon jest dostępny tylko w poziomach API> = 14 – Sandra

Odpowiedz

17

Jeśli używasz kodu ActionbarCompat udostępnianej przez Google, można uzyskać dostęp ikonę domu przez ActionBarHelperBase. klasa java dla API od wersji 4.

//code snippet from ActionBarHelperBase.java 
    ... 
    private void setupActionBar() { 
    final ViewGroup actionBarCompat = getActionBarCompat(); 
    if (actionBarCompat == null) { 
     return; 
    } 

    LinearLayout.LayoutParams springLayoutParams = new LinearLayout.LayoutParams(
      0, ViewGroup.LayoutParams.MATCH_PARENT); 
    springLayoutParams.weight = 1; 

    // Add Home button 
    SimpleMenu tempMenu = new SimpleMenu(mActivity); 
    SimpleMenuItem homeItem = new SimpleMenuItem(tempMenu, 
      android.R.id.home, 0, mActivity.getString(R.string.app_name)); 
    homeItem.setIcon(R.drawable.ic_home_ftn); 
    addActionItemCompatFromMenuItem(homeItem); 

    // Add title text 
    TextView titleText = new TextView(mActivity, null, 
      R.attr.actionbarCompatTitleStyle); 
    titleText.setLayoutParams(springLayoutParams); 
    titleText.setText(mActivity.getTitle()); 
    actionBarCompat.addView(titleText); 
} 
... 

Powinieneś być w stanie zmodyfikować kod przycisku domowego dostępnym dla działań, które rozciągają ActionBarActivity i zmienić go w ten sposób.

Honeycomb wydaje się nieco trudniejszy i wydaje się, że nie daje tak łatwego dostępu. Przypuszczam, że jego identyfikatorem powinien być także android.R.id.home, więc możesz go pobrać z widoku w ActionBarHelperHoneycomb.java

+5

Tak! Dziękuję Ci. Działa 'Activity.findViewById (android.R.id.home)'. – ab11

22

Jeśli actionbar działa jak Sherlock i opiera się na pozycji menu, to jest moje rozwiązanie:

@Override 
public boolean onPrepareOptionsMenu(Menu menu) { 
    MenuItem switchButton = menu.findItem(R.id.SwitchSearchOption);  
    if(searchScriptDisplayed){ 
     switchButton.setIcon(R.drawable.menu_precedent); 
    }else{ 
     switchButton.setIcon(R.drawable.icon_search); 
    } 
    return super.onPrepareOptionsMenu(menu); 

} 
+0

, a dla plastra miodu używam paska czynności dostarczonego przez sdk. tak, próbuję znaleźć odpowiednik honeycomb metody ActionBar.setIcon() podanej w v14. – ab11

+2

Dzięki za ten świetny fragment - szukaliśmy tego przez chwilę! – aaronsnoswell

+1

pracował dla mnie! dzięki –

0

ActionBar użyje atrybutu logo android: log, jeśli jest jest zapewniony. Dzięki temu można używać oddzielnych zasobów do rysowania dla ikony (Launcher) i logo (ActionBar, między innymi).

0

powiedziałbym zrobić coś takiego:

getSupportActionBar().setHomeButtonEnabled(true); 
getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
getSupportActionBar().setHomeAsUpIndicator(R.drawable.ic_menu_drawer); 

zobaczyć link How to change the icon actionBarCompat

Powiązane problemy