2010-07-30 16 views
15

Estoy trabajando en una aplicación en este momento que usa la subclase ImageView para mostrar una imagen con un cuadro delimitador sobre parte de ella.Obtendrá colores de tema programáticamente

Ahora la caja está dibujada en amarillo sin importar qué, pero creo que se vería mucho mejor si el color coincidiera con el botón del sistema, como naranja para el Droid, verde para el Evo o azul para Galaxy S.

Miré alrededor de las API un poco, pero no pude encontrar cómo atrapar ese color programáticamente. Alguna idea?

+0

esta es una buena pregunta y estoy teme que no haya solución. Realmente triste. – mad

+0

Han pasado 5 años desde que se hizo esta pregunta ... la respuesta actual ahora se encuentra aquí: http://stackoverflow.com/questions/12375766/how-to-get-background- color-from-current-theme-programmatically (esa primera respuesta definitivamente funciona ...) – pbarranis

Respuesta

7

Usted puede mirar en el origen del androide de themes.xml, styles.xml y colors.xml. Lo único que notas de colors.xml es que no hay muchos colores definidos. Esto se debe a que la mayoría de los widgets se realizan a través de archivos de 9 parches.

del estilo del botón:

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> 

Todo el trabajo hecho para cambiar los colores de fondo se realiza en el btn_defaultDrawable.

Fuente 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> 

Cada uno de ellos es un archivo 9-parche. El problema es que esos son pngs. Los colores están integrados en los archivos de imagen y no están definidos en ningún lugar. Como habrás notado estas imágenes pueden ser reemplazadas y el aspecto cambia.

Lamentablemente, lo que desea no es posible. Tendrás que elegir un solo color para ir. Este color probablemente debería elegirse para encajar con el resto de su aplicación. Lo sentimos :(

+0

Bueno, eso es deprimente. Gracias sin embargo. – infinitypanda

1

Comprobar este enlace: Using Platform Styles and Themes

No sé si subclases es el mejor que se puede hacer en este caso. me gustaría probar:

  • Uso ImageButton en lugar de subclases.
  • Agregue el estilo de plataforma al botón.
+2

Lo leí, pero no fue útil. Me dice cómo configurar temas, pero quiero obtener temas. Y ImageButton no es lo que estoy buscando, lo siento. No es necesario hacer clic en la imagen, solo quiero usar el mismo color que un botón. – infinitypanda

7

Desde Android ICE_CREAM_SANDWICH (API 14), que tiene los colores del tema en android.R.color *

Por ejemplo;.

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

En mi comprensión limitada, algo disponible en android.R.color es un color estático y no un color variable del Tema de la aplicación (modificable en tiempo de ejecución). La respuesta para hacerlo está aquí: http://stackoverflow.com/questions/12375766/how-to-get-background-color-from-current-theme-programmatically – pbarranis