2010-07-30 4 views
15

Je travaille sur une application qui utilise en ce moment pour montrer ImageView sous-classé une image avec un cadre de sélection sur une partie de celui-ci.Programmatically obtenir les couleurs du thème

À l'heure actuelle la boîte est dessinée en jaune, peu importe quoi, mais je pense que ce serait beaucoup mieux si la couleur correspondait à la couleur du bouton du système, comme orange pour le Droid, vert pour l'Evo, ou bleu le Galaxy S.

je regardais autour des API un peu, mais n'a pas pu trouver comment choper programme cette couleur. Des idées?

+0

ceci est une bonne question et je suis peur qu'il n'y a pas de solution vraiment triste – mad

+0

cela fait 5 ans que cette question a été posée ... la réponse actuelle est maintenant situé ici:.. http://stackoverflow.com/questions/12375766/how-to-get-background- color-from-current-theme-programatically (cette première réponse fonctionne vraiment ...) – pbarranis

Répondre

7

Vous pouvez regarder la source Android de themes.xml, styles.xml et colors.xml. La seule chose que vous remarquez du fichier colors.xml est qu'il n'y a pas beaucoup de couleurs définies. C'est parce que la plupart des widgets sont effectués via des fichiers de 9 patchs.

style Button:

223  <style name="Widget.Button"> 
224   <item name="android:background">@android:drawable/btn_default</item> 
225   <item name="android:focusable">true</item> 
226   <item name="android:clickable">true</item> 
227   <item name="android:textAppearance">?android:attr/textAppearanceSmallInverse</item> 
228   <item name="android:textColor">@android:color/primary_text_light</item> 
229   <item name="android:gravity">center_vertical|center_horizontal</item> 
230  </style> 

Tous les travaux effectués pour changer les couleurs de fond est fait dans le btn_defaultDrawable.

Source de btn_default.xml:

17 <selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    18  <item android:state_window_focused="false" android:state_enabled="true" 
    19   android:drawable="@drawable/btn_default_normal" /> 
    20  <item android:state_window_focused="false" android:state_enabled="false" 
    21   android:drawable="@drawable/btn_default_normal_disable" /> 
    22  <item android:state_pressed="true" 
    23   android:drawable="@drawable/btn_default_pressed" /> 
    24  <item android:state_focused="true" android:state_enabled="true" 
    25   android:drawable="@drawable/btn_default_selected" /> 
    26  <item android:state_enabled="true" 
    27   android:drawable="@drawable/btn_default_normal" /> 
    28  <item android:state_focused="true" 
    29   android:drawable="@drawable/btn_default_normal_disable_focused" /> 
    30  <item 
    31   android:drawable="@drawable/btn_default_normal_disable" /> 
    32 </selector> 

Chacun d'entre eux est un fichier 9-patch. Le problème est que ce sont des pngs. Les couleurs sont intégrées dans les fichiers image et ne sont définies nulle part. Comme vous l'avez remarqué, ces images peuvent être remplacées et l'apparence change.

Malheureusement, ce que vous voulez est impossible. Vous allez devoir choisir une seule couleur pour aller avec. Cette couleur devrait probablement être choisie pour s'adapter au reste de votre application. Désolé :(

+0

Eh bien c'est déprimant. Merci quand même. – infinitypanda

1

Vérifiez ce lien: Using Platform Styles and Themes

Je ne sais pas si subclassing est la meilleure chose à faire dans ce cas. Je voudrais essayer:

  • Utilisation ImageButton au lieu de sous-classement. Ajoutez le style de plate-forme au bouton.
+2

J'ai lu ça, mais ça n'a pas été utile, ça me dit comment régler les thèmes, mais je veux avoir des thèmes. Et ImageButton n'est pas ce que je cherche, désolé. L'image n'a pas besoin d'être cliquable, je veux juste utiliser la même couleur qu'un bouton. – infinitypanda

7

De Android ICE_CREAM_SANDWICH (API 14), vous avez les couleurs du thème dans android.R.color *

Par exemple,.

myTextView.setTextColor(getResources().getColor(android.R.color.holo_red_light)); 
+1

Dans ma compréhension limitée, quelque chose disponible à partir de android.R.color est une couleur statique et non une couleur modifiable du thème de l'application (modifiable à l'exécution). La réponse à cette question est ici: http://stackoverflow.com/questions/12375766/how-to-get-background-color-from-current-theme-programmatically – pbarranis

Questions connexes