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_default
Drawable
.
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é :(
ceci est une bonne question et je suis peur qu'il n'y a pas de solution vraiment triste – mad
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