Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Obtener un valor de color attr basado en el tema de conjunto actual

En mi actividad estoy manteniendo un SuperActivity , en el que estoy fijando el tema.

 public class SuperActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setTheme(R.style.MyTheme); } } 

Themes.xml

 <!-- ImageBackround --> <style name="Theme.MyTheme" parent="ThemeLight"> <item name="myBgColor">@color/translucent_black</item> </style> 

Ahora quiero buscar este color en una actividad de mi hijo.

Como se menciona en esta probable respuesta , escribí:

 int[] attrs = new int[] { R.attr.myBgColor /* index 0 */}; TypedArray ta = ChildActivity.this.obtainStyledAttributes(attrs); int color = ta.getColor(0, android.R.color.background_light); String c = getString(color); ta.recycle(); 

Pero cada vez que estoy recibiendo el valor del valor predeterminado de android.R.color.background_light & not de R.attr.myBgColor .

Donde estoy haciendo mal. ¿Estoy pasando el contexto incorrecto de ChildActivity.this ?

  • Cómo configurar el tema de Holo para la aplicación de Android
  • Cómo cambiar el tema de la aplicación de "Actividad en blanco" a "Flujo maestro / detallado"
  • Problemas con el tema translúcido
  • Cómo configurar el holo tema oscuro en una aplicación de Android?
  • ¿Hay un tema para Holo, a pantalla completa pero con Action Bar?
  • Vista previa de tema falla en Eclipse
  • Cómo a los botones del cuadro de diálogo de estilo de Android Holo tema
  • Establecer la imagen de fondo para toda la aplicación en android
  • One Solution collect form web for “Obtener un valor de color attr basado en el tema de conjunto actual”

    Tienes dos soluciones posibles (una es lo que realmente tienes, pero incluyo ambas en aras de la integridad):

     TypedValue typedValue = new TypedValue(); if (context.getTheme().resolveAttribute(R.attr.xxx, typedValue, true)) return typedValue.data; else return Color.TRANSPARENT; 

    o

     int[] attribute = new int[] { R.attr.xxx }; TypedArray array = context.getTheme().obtainStyledAttributes(attribute); int color = array.getColor(0, Color.TRANSPARENT); array.recycle(); return color; 

    Color.TRANSPARENT podría ser cualquier otro defecto seguro. Y sí, como usted sospechaba, el contexto es muy importante. Si sigues recibiendo el color predeterminado en lugar del verdadero, comprueba el contexto que estás pasando. Me tomó varias horas para averiguarlo, traté de ahorrar algo de mecanografía y simplemente use getApplicationContext() pero no encuentra los colores entonces …

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.