2012-07-09 12 views
15

Próbowałem przez jakiś czas nadać styl przedmiotom z rozwijanej listy dodanej do paska akcji, ale nie mogę wymyślić odpowiedniego kodu.Stylizacja Sherlocka Pasek czynności rozwijanych przedmiotów

Próbowałem zaglądać do abs__styles.xml i abs__themes.xml w projekcie SherlockActionBar, ale żaden z elementów dodanych do mojego projektu nie zadziałał.

Sposób tworzę z menu jest następująca:

@Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Sharing icons 
     SubMenu submenu = menu.addSubMenu(null); 
     submenu.add(getResources().getString(R.string.twitter)); 
     submenu.add(getResources().getString(R.string.facebook)); 
     submenu.add(getResources().getString(R.string.email)); 

     // Share button itself 
     MenuItem ShareButton = submenu.getItem(); 
     ShareButton.setIcon(R.drawable.icon_share_triangle); 
     ShareButton.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS | MenuItem.SHOW_AS_ACTION_WITH_TEXT); 

     // Twitter submenu button 
     MenuItem TwitterItem = submenu.getItem(0); 
     TwitterItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS | MenuItem.SHOW_AS_ACTION_WITH_TEXT); 
     TwitterItem.setOnMenuItemClickListener(new OnMenuItemClickListener() { 
      public boolean onMenuItemClick(MenuItem item) { 
       setShareTwitterIntent(); 
       return true; 
      } 
     }); 
... 
} 

Próbowałem też przyjrzeniu się tej post używając następującego kodu, ale nadal nie ma szczęścia:

<!-- style the list navigation --> 
<style name="MyDropDownNav" parent="android:style/Widget.Holo.Light.Spinner.DropDown.ActionBar"> 
    <item name="android:background">@drawable/ad_spinner_background_holo_light</item> 
    <item name="android:popupBackground">@drawable/ad_menu_dropdown_panel_holo_light</item> 
    <item name="android:dropDownSelector">@drawable/ad_selectable_background</item> 
</style> 

I wystarczy zmienić kolor tła elementów z rozwijanej listy.

Bardzo dziękuję za pomoc!

EDIT:

Próbowałem też to, i nadal nie działa:

<item name="android:actionDropDownStyle">@style/MyApp.DropDownNav</item> 
<item name="actionDropDownStyle">@style/MyApp.DropDownNav</item> 
... 
<style name="MyApp.DropDownNav" parent="Widget.Sherlock.Light.Spinner.DropDown.ActionBar"> 
     <item name="android:background">@drawable/sharing_panel</item> 
</style> 
+0

Czy Twój niestandardowy motyw pochodzi z Theme.Holo.Light.DarkActionBar? –

+0

Czy problem został rozwiązany? – Spike

+0

to zostało przełożone w moim projekcie, ponieważ miał niski priorytet, ale jak tylko go naprawię, dam wam znać .. – noloman

Odpowiedz

27

Miałem ten sam problem i po wielu drapaniach głowy - rodzaju drapania jak pies z kiepskim przypadkiem pcheł - dostałem go do pracy. Dotyczy to ABS 4.1 (90). Poniższy kod zmieni kolor tła rozwijanej pozycji.

SomeActivity.java

Context context = ab.getThemedContext(); 
ArrayAdapter<CharSequence> list = ArrayAdapter.createFromResource(
    context, R.array.map_activity_view_list, 
    R.layout.sherlock_spinner_item); 
list.setDropDownViewResource(R.layout.sherlock_spinner_dropdown_item); 

Uwaga: Za pomocą R.layout.sherlock_spinner_item dla createFromResource i R.layout.sherlock_spinner_dropdown_item dla setDropDownViewResource. To jest to, co pojawia się w próbce w źródle ABS: https://github.com/JakeWharton/ActionBarSherlock/blob/master/samples/demos/src/com/actionbarsherlock/sample/demos/ListNavigation.java

To dlatego, że zaznaczone rozwijanej na pasku akcji, kiedy to układ sherlock_spinner_item a rzeczywiste elementy rozwijane wykorzystywać układ sherlock_spinner_dropdown_item co oznacza, że ​​style są różne dla każda:

  • sherlock_spinner_item
    • android: spinnerItemStyle
    • spinnerItemStyle
  • sherlock_spinner_dropdown_item
    • android: spinnerDropDownItemStyle
    • spinnerDropDownItemStyle

Pamiętaj potrzebne oba style - Android: prefiksem style dla rodzimej ActionBar ICS i styl bez androida : prefiks jest dla stylu AcrionBarSherlock na urządzeniach starszych niż ICS.

res/values ​​/ styles.xml

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <style name="Theme.MyApp" parent="Theme.Sherlock.Light"> 
     <!-- the text when loading --> 
     <!-- 
     <item name="actionBarStyle">@style/Widget.MyApp.ActionBar</item> 
     <item name="android:actionBarStyle">@style/Widget.MyApp.ActionBar</item> 
     --> 

     <!-- the dropdown items --> 
     <item name="android:spinnerDropDownItemStyle">@style/MyApp.Widget.Holo.DropDownItem</item> 
     <item name="spinnerDropDownItemStyle">@style/MyApp.Widget.Holo.DropDownItem</item> 

     <!-- the action bar dropdown menu item --> 
     <!-- 
     <item name="android:spinnerItemStyle">@style/MyApp.Widget.Holo.SpinnerItem</item> 
     <item name="spinnerItemStyle">@style/MyApp.Widget.Holo.SpinnerItem</item> 
     --> 
    </style> 

    <style name="Widget.MyApp.ActionBar" parent="Widget.Sherlock.Light.ActionBar"> 
     <item name="titleTextStyle">@style/Widget.MyApp.TitleTextStyle</item> 
     <item name="android:titleTextStyle">@style/Widget.MyApp.TitleTextStyle</item> 
    </style> 

    <style name="Widget.MyApp.TitleTextStyle" parent="TextAppearance.Sherlock.Widget.ActionBar.Title"> 
    <item name="android:textColor">@color/orange</item> 
    </style> 

    <style name="MyApp.Widget.Holo.DropDownItem" parent="Widget.Sherlock.Light.DropDownItem.Spinner"> 
     <item name="android:background">@color/orange</item> 
    </style> 

    <style name="MyApp.Widget.Holo.SpinnerItem" parent="Widget.Sherlock.TextView.SpinnerItem"> 
     <item name="android:background">@color/orange</item> 
    </style> 

</resources> 

res/wartości/color.xml

<?xml version="1.0" encoding="utf-8"?> 
<resources> 

<color name="orange">#ffEf4f1f</color> 

</resources> 

Proszę oznaczyć jako odpowiedź, czy to rozwiązuje go dla Ciebie. Dzięki!

Linki:

Przeglądaj style:

https://github.com/JakeWharton/ActionBarSherlock/blob/master/actionbarsherlock/res/values/abs__styles.xml

Przeglądaj tematy:

https://github.com/JakeWharton/ActionBarSherlock/blob/master/actionbarsherlock/res/values/abs__themes.xml

+2

nie działa tak, jak powiedziałeś. Niemniej jednak zaktualizowałem swój post pokazujący, w jaki sposób tworzę menu. – noloman

+0

Dziwne, zadziałało dla mnie w moim projekcie. Być może są inne zmiany w twoich stylach/motywach, które mają na nie wpływ. –

+0

Kluczem dla mnie było używanie getThemedContext() zamiast tylko przekazywania aktywności. Dzięki! – phreakhead

0

ActionBarSherlock wymaga użycia jednego ze swoich 3 tematów. Można rozszerzyć je choć i przesłonić styl rozwijanej tak:

<style name="MySherlockLightTheme" parent="Theme.Sherlock.Light"> 
    <item name="actionDropDownStyle">@style/MyDropDownNav</item> 
</style> 

to zakładając chcesz holo motyw światła, a Twój styl rozwijana jest MyDropDownDav.

Następnie w swoim kodzie, po prostu przełączasz się, aby użyć swojego motywu (albo w manifeście, albo zrób to w działaniu onCreate).

+0

Upewnij się, że umieściłeś również " @ style/MyDropDownNav 'tak, aby natywny pasek akcji używał go również na plastrze miodu i później. – Karakuri

+0

Zrobiłem ale nadal nie działa, nie ma różnic .. – noloman

4

Aby zmienić rozciągliwej tła menu w Sherlocka działania Bar (V4. 1.0), użyj następującego:

<style name="My_Theme" parent="Theme.Sherlock"> 
    <item name="android:popupMenuStyle">@style/MyApp.PopupMenuStyle</item> 
    <item name="popupMenuStyle">@style/MyApp.PopupMenuStyle</item> 
</style> 

<style name="MyApp.PopupMenuStyle" parent="Widget.Sherlock.ListPopupWindow"> 
    <item name="android:popupBackground">@drawable/menu_item_background</item> 
</style> 

mam nadzieję, że to pomoże.

3

użyłem tego i jego pracy dla mnie

<style name="MyDropDownItem" parent="Widget.Sherlock.Spinner.DropDown.ActionBar"> 
    <item name="android:background">@drawable/spinner_background_holo_light</item> 
    <item name="android:popupBackground">@color/actionbar_normal</item> 
    <item name="android:dropDownSelector">@drawable/list_selector_holo_light</item> 
</style> 

<style name="myTheme" parent="@style/Theme.Sherlock"> 
    ... 
    ... 
    ... 
    <item name="android:actionDropDownStyle">@style/MyDropDownItem</item> 
    <item name="actionDropDownStyle">@style/MyDropDownItem</item> 
</style> 

gdzie

"spinner_background_holo_light" i "list_selector_holo_light" są selektorów

i

"actionbar_normal" rozciągliwej (image LUB kolor)

2

Nie jestem pewien, czy na to pytanie odpowiedziano w zadowalający sposób, ale wpadłem na ten problem i nie znalazłem odpowiedzi, która by mi się podobała.Wygląda na to, że mam dość standardową konfigurację ActionBarSherLock i użycie rozwijanej nawigacji dało mi pewne złe wyniki po wyjęciu z pudełka. Czarny tekst na czarnym tle. Chcę, aby tekst był biały. Oto w jaki sposób zrealizować go:

Na początek, baza motyw moja aplikacja rozszerza Theme.Sherlock:

<style name="AppBaseTheme" parent="Theme.Sherlock"> 
</style> 

Mój rzeczywisty motyw aplikacja AppTheme rozciąga mojej bazy (nie pamiętam dlaczego zrobiłem to na czas, prawdopodobnie nie jest to konieczne).

<style name="AppTheme" parent="AppBaseTheme"> 
    <item name="spinnerItemStyle">@style/SpinnerItemStyle</item> 
    <item name="android:spinnerItemStyle">@style/SpinnerItemStyle</item> 
</style> 

musiałem zastąpić Widget.Sherlock.TextView.SpinnerItem i tak jak poniżej:

<style name="SpinnerItemStyle" parent="Widget.Sherlock.TextView.SpinnerItem"> 
<item name="android:textAppearance">@style/TextAppearance.MySpinnerItem</item> 
</style> 

Powodem robi to był dostęp do widgetu TextApperance: TextAppearance.Sherlock.Widget.TextView.SpinnerItem

ta została przesłonięta jak poniżej:

<style name="TextAppearance.MySpinnerItem" parent="TextAppearance.Sherlock.Widget.TextView.SpinnerItem"> 
    <item name="android:textColor">#FFFFFF</item> 
    <item name="android:textSize">16sp</item> 
    <item name="android:textStyle">normal</item> 
</style> 

Mój największy błąd w wiązaniu, aby uzyskać t Próbował naprawić ten tekst, próbując bezpośrednio ustawić textColor w przesłoniętym SpinnerItemStyle. Ponieważ używał widżetu textAppearance, po prostu nie działał.

Wtedy mój kod do tej pracy wygląda następująco (w metodzie onCreate Moja aktywność w):

SpinnerAdapter spinnerAdapter = ArrayAdapter.createFromResource(this, 
      R.array.call_type, R.layout.sherlock_spinner_item); 

OnNavigationListener onNavigationListener = new OnNavigationListener() { 
     // Get the same strings provided for the drop-down's ArrayAdapter 
     String[] strings = getResources().getStringArray(R.array.call_type); 

     @Override 
     public boolean onNavigationItemSelected(int position, long itemId) { 
      String filter = strings[position]; 
      filterCalls(filter); 
      return true; 
     } 
    }; 

ActionBar actionBar = getSupportActionBar(); 
    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST); 
    actionBar.setListNavigationCallbacks(spinnerAdapter, 
      onNavigationListener); 

Pozwoliło to mój zmienić kolor tekstu, o spadku w dół za pomocą wirowania ActionBarSherlock.