Pregunta Programar programáticamente los colores del tema


Estoy trabajando en una aplicación ahora que usa subclassed ImageView para mostrar una imagen con un recuadro de delimitación sobre una parte.

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

Miré un poco las API, pero no pude encontrar la forma de atrapar ese color programáticamente. ¿Algunas ideas?


15
2017-07-30 20:54


origen


Respuestas:


Puedes ver la fuente de Android themes.xml, styles.xmly 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.

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 realizado para cambiar los colores de fondo se realiza en btn_default  Drawable.

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 de 9 parches. 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 quieres 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 siento :(


7
2017-08-03 00:15



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

Por ejemplo;

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

7
2018-05-29 08:33



Mira este enlace: Usar estilos y temas de plataforma

No sé si la subclasificación es lo mejor que se puede hacer en este caso. Lo intentaré:

  • Utilizar ImageButton en lugar de subclasificar
  • Agregue el estilo de plataforma al botón.

1
2017-07-30 21:17