2014-05-11 4 views
1

Basé sur le thème de l'application sélectionnée (Dark ou Light) J'ai deux ensembles différents de dessinables (aussi, Dark and Light). Si j'ai besoin de mettre à jour l'état d'un bouton, disons, mettre à jour le bouton pause/lecture, comment ferais-je cela puisque je ne peux pas référencer l'original sans connaître le thème actuel.bouton de changement Android programme basé sur le thème

Par exemple, styles.xml

<style name="Theme.ServeStream.Dark" parent="@style/Theme.AppCompat"> 
    <item name="attr/ic_action_pause_over_video">@drawable/ic_action_pause_over_video_dark</item> 
    <item name="attr/ic_action_play_over_video">@drawable/ic_action_play_over_video_dark</item> 
    <item name="attr/ic_action_previous">@drawable/ic_action_previous_dark</item> 
    <item name="attr/ic_action_next">@drawable/ic_action_next_dark</item> 
</style> 

<style name="Theme.ServeStream.Light" parent="@style/Theme.AppCompat.Light"> 
    <item name="attr/ic_action_pause_over_video">@drawable/ic_action_pause_over_video_light</item> 
    <item name="attr/ic_action_play_over_video">@drawable/ic_action_play_over_video_light</item> 
    <item name="attr/ic_action_previous">@drawable/ic_action_previous_light</item> 
    <item name="attr/ic_action_next">@drawable/ic_action_next_light</item> 
</style> 

attrs.xml:

<attr name="ic_action_pause_over_video" format="reference" /> 
<attr name="ic_action_play_over_video" format="reference" /> 
<attr name="ic_action_previous" format="reference" /> 
<attr name="ic_action_next" format="reference" /> 

Cependant, le code suivant ne compile pas:

mPauseButton.setImageResource(R.drawable.ic_action_pause_over_video); 

Répondre

1

Vous pouvez obtenir des ressources id vous avez défini pour le thème actuel dans le code, comme:

TypedValue typedvalueattr = new TypedValue(); 

getTheme().resolveAttribute(R.attr.ic_action_pause_over_video, typedvalueattr, true); 
mPauseButton.setImageResource(typedvalueattr.resourceId); 

Comment utiliser les attributs pour plusieurs thèmes de style mises en page XML, vous pouvez lire there.

+0

Merci, ça a marché! –

Questions connexes