Można spojrzeć na źródła z Androidem themes.xml
, styles.xml
i colors.xml
. Jedną rzeczą, którą zauważysz w pliku colors.xml, jest to, że nie zdefiniowano zbyt wielu kolorów. Wynika to z faktu, że większość widżetów jest tworzona za pomocą plików z 9 łatami.
Przycisk styl:
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>
Wszystkie wykonanej pracy, aby zmienić kolory tła odbywa się w btn_default
Drawable
.
Źródło 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>
Każdy z tych plików jest 9-łata. Problem polega na tym, że są to pngs. Kolory są wbudowane w pliki obrazów i nie są nigdzie zdefiniowane. Jak zauważyłeś, te obrazy można zastąpić, a wygląd zmienia się.
Niestety, to, czego chcesz, nie jest możliwe. Będziesz musiał wybrać jeden kolor, z którym chcesz przejść. Ten kolor prawdopodobnie powinien być wybrany tak, aby pasował do reszty aplikacji. Niestety :(
to jest dobre pytanie i jestem Obawiam się, że nie ma rozwiązania ... naprawdę smutne – mad
Minęło 5 lat, odkąd zadano to pytanie ... obecna odpowiedź znajduje się teraz tutaj: http://stackoverflow.com/questions/12375766/how-to-get-background- color-from-current-theme-programowo (ta pierwsza odpowiedź na pewno działa ...) – pbarranis