2012-07-03 8 views
11

Czy istnieje sposób zmiany koloru tła paska kart w pasku akcji bez zmieniania go w wersji jednoliniowej?Zmiana koloru tła przycisków ActionBar

Aby wyjaśnić, co chcę: W trybie portretowym pasek akcji jest podzielony na dwie linie, sam pasek akcji i karty poniżej. W trybie poziomym zakładki znajdują się w ActionBar.

Chcę zmienić kolor tła w trybie portretu. Jeśli zmienię tło w TabView, zostanie zmieniony dla obu trybów. Czy muszę dla nich tworzyć osobne style? Co wywołuje drugie pytanie: czy istnieje sposób, aby wiedzieć, kiedy będą dwie linie, a kiedy nie?

A może po prostu czegoś brakuje?

Używam ActionBarSherlock btw

+0

Może to pomoże: http://stackoverflow.com/questions/10064411/change-actionbarsherlock-background-color – 0gravity

+1

Nie jest to problem tła ActionBara, ale tło paska zakładek. –

Odpowiedz

41

myślę szukasz atrybutu stylu ActionBar android:backgroundStacked:

<style name="MyTheme" parent="android:Theme.Holo.Light"> 
    <item name="android:actionBarStyle">@style/MyActionBarStyle</item> 
</style> 

<style name="MyActionBarStyle" parent="@android:style/Widget.Holo.Light.ActionBar.Solid"> 
    <item name="android:backgroundStacked">@drawable/my_stacked_background</item> 
</style> 

lub (W przypadku korzystania ActionBarSherlock):

<style name="MyTheme" parent="@style/Theme.Sherlock.Light"> 
    <item name="android:actionBarStyle">@style/MyActionBarStyle</item> 
    <item name="actionBarStyle">@style/MyActionBarStyle</item> 
</style> 

<style name="MyActionBarStyle" parent="@style/Widget.Sherlock.Light.ActionBar.Solid"> 
    <item name="android:backgroundStacked">@drawable/my_stacked_background</item> 
    <item name="backgroundStacked">@drawable/my_stacked_background</item> 
</style> 
+2

To jest poprawna odpowiedź! –

+1

Czy możesz opracować, jak to działa z domyślnym motywem holo light? Jak się nazywasz? Co nazywasz w manifeście? To nie działa. –

3

W ActionBarSherlock na values/abs__themes.xml jest

<item name="actionModeSplitBackground">@drawable/abs__cab_background_bottom_holo_dark</item> 

Trzeba stworzyć swój własny motyw pochodzący z ABS

<style name="AppTheme" parent="Theme.Sherlock"> 
    <item name="actionBarStyle">@style/MyActionBar</item> 
    <item name="android:actionBarStyle">@style/MyActionBar</item> 
</style> 

<style name="MyActionBar" parent="Widget.Sherlock.ActionBar"> 
    <item name="actionModeSplitBackground">@drawable/my_split_background</item> 
</style> 

nadzieję, że to pomaga.

+0

Tak właśnie myślałem, ale nic nie zmienia. –

+0

Czy zastosowałeś ten motyw do swojej aplikacji w AndroidManifest.xml? – vasart

+0

Tak. Ale jest to zła wartość. Jeśli spojrzysz na rzeczywisty zasób (abs__cab_background_bottom_holo_dark), niebieski pasek, który jest używany do pokazania, że ​​został wybrany, jest na górze, a nie na dole. Również nie ma różnych trybów dla zaznaczonych/niezaznaczonych itp. –

0

Aby oddzielić stylów w zależności od orientacji trzeba utworzyć w folderze /res nowy folder o nazwie layout-land (dla trybu krajobrazu) i layout-port (w układzie pionowym) i umieścić swoje pliki xml na pasku akcji i ustaw jego specyficzny styl (z żądany kolor) w każdym folderze.

+0

Dzięki, jestem tego świadomy. Ale to nie tylko krajobraz/portret. Zakładam, że na tabletach zawsze będzie to tylko jedna linia.Wiem, że mogę również mieć oddzielne style dla dużych ekranów itp., Ale nie wiem, jaki tryb będzie używany w której konfiguracji. –

23

zmienić kolor Actionbar Tab, Pls użyć tego kodu:

// Na przykład, jeśli chcesz Biały kolor jako tło Tabulatory, następnie

getActionBar().setStackedBackgroundDrawable(new ColorDrawable(Color.parseColor("#FFFFFF"))); 
+0

Awesome czysty kod :) – ROR

+0

Dziękuję @ROR;) –

+0

wspaniała ans :) dzięki :) – Nevaeh

1
ColorDrawable colorDrawable = new ColorDrawable(Color.White); 
actionBar.SetStackedBackgroundDrawable(colorDrawable); 

dla xamarinów.

+0

Trochę wyjaśnienia poprawi tę odpowiedź. –