Программно получать цвета темы

Я сейчас работаю над приложением, которое использует подклассы ImageView, чтобы показать изображение с ограничивающей рамкой над его частью.

Прямо сейчас ящик рисуется желтым, несмотря ни на что, но я думаю, что было бы намного лучше, если бы цвет соответствовал цвету кнопки системы, например, оранжевый для Droid, зеленый для Evo или синий для Галактика С.

Я немного искал API, но не смог найти, как программно набить этот цвет. Любые идеи?

Ответы

Ответ 1

Вы можете посмотреть источник с android themes.xml, styles.xml и colors.xml. Единственное, что вы замечаете из colors.xml, состоит в том, что определено не так много цветов. Это связано с тем, что большинство виджетов выполняются через файлы с 9 патчами.

Стиль кнопки:

 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>

Вся работа, выполненная для изменения цветов фона, выполняется в btn_default Drawable.

Источник 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>

Каждый из них является файлом с 9 патчами. Проблема в том, что это png. Цвета встроены в файлы изображений и нигде не определены. Как вы заметили, эти изображения могут быть заменены и внешний вид меняется.

К сожалению, то, что вы хотите, невозможно. Вам нужно будет выбрать один цвет. Этот цвет, вероятно, должен быть выбран в соответствии с остальной частью вашего приложения. Извините: (

Ответ 2

Из Android ICE_CREAM_SANDWICH (API 14) у вас есть цвета тем в android.R.color. *

Например:

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