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

  • ¿Cuántas colas de solicitud de Volley deben mantenerse?
  • Abrir Google Maps desde hipervínculo
  • Cuál es el fondo de diseño predeterminado
  • ¿Cómo hacer que el dispositivo Android siempre esté en modo despertar?
  • Dibujar sobre 4K polylines en android google maps
  • Trabajo Android con Arduino
  •  <!-- 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 ?

  • Transferencia de llamadas de un dispositivo a otro a través de Bluetooth
  • Texto editable a cadena
  • ¿Rollo horizontal en textview en androide?
  • ¿Puede el SDK de Android trabajar con JDK 1.7?
  • ¿Cómo hacer que una aplicación ignore el cambio de orientación de la pantalla?
  • Alinear el diseño de dos botones izquierdo y derecho 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.