2011-09-23 9 views
8

Moja aplikacja z kartami ma dwa motywy. W każdej zakładce tematów znajdują się różne obrazy w wybranym i niezaznaczonym stanie. Jak mogę właściwie odwoływać się do obrazu według motywu?Odsyłacz z rysowania do stylu

Na przykład. Mam w themes.xml

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

<style name="LightTheme" parent="@android:style/Theme.Light"> 
    <item name="tabShows">@drawable/ic_tab_shows_unselected_light</item> 
    <item name="tabShowsSelected">@drawable/ic_tab_shows_selected_light</item> 
    <item name="tabNews">@drawable/ic_tab_news_selected_light</item> 
    <item name="tabNewsSelected">@drawable/ic_tab_news_unselected_light</item> 
</style> 

<style name="DarkTheme" parent="@android:style/Theme.Black"> 
    <item name="tabShows">@drawable/ic_tab_shows_unselected_dark</item> 
    <item name="tabShowsSelected">@drawable/ic_tab_shows_selected_dark</item> 
    <item name="tabNews">@drawable/ic_tab_news_selected_dark</item> 
    <item name="tabNewsSelected">@drawable/ic_tab_news_unselected_dark</item> 
    </style> 

Również mam tab_shows.xml i tab_news.xml

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
<item android:state_selected="true" android:drawable="@drawable/ic_tab_shows_selected_light"/> 
<item android:state_selected="false" android:drawable="@drawable/ic_tab_shows_unselected_light" /> 

Jak mogę odwołać się do potrzebnego obrazu w zależności od selektora aktualny temat? To nie działa na mnie

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
<item android:state_selected="true" android:drawable="?tabShowsSelected"/> 
<item android:state_selected="false" android:drawable="?tabShows" /> 

W plikach układ ten działa, mam na myśli odniesienie do stylu poprzez? StyleName

+0

Mam ten sam problem tutaj: http://stackoverflow.com/q/12115125/317889 – HGPB

+0

robie coś podobnego TUTAJ !!! http://stackoverflow.com/questions/17103894/overriding-referenced-style-attributes – toobsco42

Odpowiedz

2

Można znaleźć swoją odpowiedź tutaj http://www.androidengineer.com/2010/06/using-themes-in-android-applications.html

Edycja
(Dodatkowe informacje od Lukap w komentarzach)

  1. Zdefiniuj jeden lub więcej motywów w themes.xml i ustaw tam definicje swoich stylów.
  2. Zdefiniuj niestandardowe atrybuty, a.k.a. style niestandardowe, w attrs.xml.
  3. Opisz, jakie wartości niestandardowych stylów znajdują się w styles.xml.

Ale trzeba przeczytać więcej o attrs.xml

<item name="android:background">? android:attr/activatedBackgroundIndicator</item> 
</style> 

Zamiast tego, mamy na myśli wartości innego atrybutu - activatedBackgroundIndicator - z naszego odziedziczonego tematu. Niezależnie od tego, który temat jest zdefiniowany jako activatedBackgroundIndicator, powinno to być nasze tło.

+0

to bardzo ładny tutorial – Lukap

+1

Dzięki. Czy w tym samouczku były motywy mojej aplikacji. Jednak nie ma odpowiedzi na moje pytanie. –

+0

thre jest odpowiedzią w wierszach 1. Zdefiniuj jeden lub więcej motywów w pliku themes.xml i ustaw tam definicje swoich stylów. 2. Zdefiniuj niestandardowe atrybuty, a.k.a. style niestandardowe, w pliku attrs.xml. 3. Opisz, jakie wartości twoich stylów niestandardowych znajdują się w pliku styles.xml. ale musisz przeczytać więcej na temat attrs.xml – Lukap

5

Zbuduj swój styl A i styl B

w twoim przypadku można umieścić android:drawable="@drawable/ic_tab_shows_selected_light" zamiast tle (po prostu kopiowane snipets z mojego kodu) # 000

<style name="styleB"> 
     <item name="android:background">#000</item> 
    </style> 

Twój motywu

<style name="Theme.A"> 
     <item name="pageBackground">@style/styleA</item> 
    </style> 

motyw B

<style name="Theme.Blue"> 
     <item name="pageBackground">@style/styleB</item> 
    </style> 

w swoim attr.XML-

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <attr name="pageBackground" format="reference" /> 
</resources> 

wreszcie w swoim widget zrobić style="?pageBackground"

+0

UWAGA w twoim przypadku zamiast tła umieścisz android: drawable = "@ drawable/ic_tab_shows_selected_light" ... itd., Ale to jest sposób na zrobienie tego. – Lukap

+0

Dzięki, spróbuję to zrobić. –

+1

Hmm. Wiele stylów to dobrze, rozumiem. Ale nie rozumiem, jak zastosować to podejście do pliku do wyboru selektora. Tworzę kartę i przesyłam do niej drawable resourceId (plik selektora) Jak ustawić właściwy obraz (według motywu) w tym selektorze. Referencje takie jak? StyleNameToOtherDrawable nie działają. Nie działa również z kodem spec.setIndicator (res.getDrawable (R.attr.tabShows)); –