resource from color android colors

android - from - Obtener color-int del recurso de color



get color int android (6)

Define tu color

valores / color.xml

<?xml version="1.0" encoding="utf-8"?> <resources> <!-- color int as #AARRGGBB (alpha, red, green, blue) --> <color name="orange">#fff3632b</color> ... <color name="my_view_color">@color/orange</color> </resources>

Consigue el color int y configúralo.

int backgroundColor = ContextCompat.getColor(context, R.color.my_view_color); // Color backgroundColor = ... (Don''t do this. The color is just an int.) myView.setBackgroundColor(backgroundColor);

Ver también

¿Hay una manera de obtener un int de color de un recurso de color? Estoy tratando de obtener los componentes individuales rojos, azules y verdes de un color definido en el recurso (R.color.myColor) para poder establecer los valores de tres barras de búsqueda a un nivel específico.

Para obtener más información sobre otro caso de uso que pueda ayudar a que surja esta pregunta en los resultados de búsqueda, quise aplicar alfa a un color definido en mis recursos.

Usando la respuesta correcta de @ sat:

int alpha = ... // 0-255, calculated based on some business logic int actionBarBackground = getResources().getColor(R.color.actionBarBackground); int actionBarBackgroundWithAlpha = Color.argb( alpha, Color.red(actionbarBackground), Color.green(actionbarBackground), Color.blue(actionbarBackground) );


El mejor enfoque

Como respuesta de @sat, un buen enfoque para obtener color es

ResourcesCompat.getColor(getResources(), R.color.your_color, null);

o utilice el método a continuación cuando no tenga acceso al método getResources() .

Context context = getContext(); // like Dialog class ResourcesCompat.getColor(context.getResources(), R.color.your_color, null);

Lo que hago es

public void someMethod(){ ... ResourcesCompat.getColor(App.getRes(), R.color.your_color, null); }

¡Es muy simple de usar en cualquier parte de tu aplicación! Incluso en la clase Util o cualquier clase en la que no tenga Context o getResource ()

Problema (cuando no tienes contexto)

Cuando no tiene acceso de Context , como un método en su clase Util .

Supongamos el siguiente método sin contexto.

public void someMethod(){ ... // can''t use getResource() without Context. }

Ahora pasará Context como parámetro en este método y usará getResources().

public void someMethod(Context context){ ... context.getResources... }

Así que aquí hay una solución exclusiva de Bonus mediante la cual puede acceder a recursos desde cualquier lugar como la Util class . Agregue Resources a su clase de Application o cree uno si no existe.

import android.app.Application; import android.content.res.Resources; public class App extends Application { private static App mInstance; private static Resources res; @Override public void onCreate() { super.onCreate(); mInstance = this; res = getResources(); } public static App getInstance() { return mInstance; } public static Resources getResourses() { return res; } }

Agregue el campo de nombre a su manifest.xml <application etiqueta de <application . (Si no está añadido ya)

<application android:name=".App" ... > ... </application>

Ahora eres bueno para irte. Use ResourcesCompat.getColor(App.getRes(), R.color.your_color, null); En cualquier lugar en la aplicación.


Acceder a los colores desde una clase sin actividad puede ser difícil. Una de las alternativas que encontré fue usar enum . enum ofrece mucha flexibilidad.

public enum Colors { COLOR0(0x26, 0x32, 0x38), // R, G, B COLOR1(0xD8, 0x1B, 0x60), COLOR2(0xFF, 0xFF, 0x72), COLOR3(0x64, 0xDD, 0x17); private final int R; private final int G; private final int B; Colors(final int R, final int G, final int B) { this.R = R; this.G = G; this.B = B; } public int getColor() { return (R & 0xff) << 16 | (G & 0xff) << 8 | (B & 0xff); } public int getR() { return R; } public int getG() { return G; } public int getB() { return B; } }


Basado en la nueva biblioteca de soporte de Android (y this actualización), ahora debe llamar:

ContextCompat.getColor(context, R.color.name.color);

Según la this :

public int getColor (int id)

Este método fue desaprobado en el nivel de API 23 . Use getColor (int, Theme) en su lugar

Es la misma solución para getResources().getColorStateList(id) :

Tienes que cambiarlo así:

ContextCompat.getColorStateList(getContext(),id);


Puedes usar:

getResources().getColor(R.color.idname);

Marque aquí sobre cómo definir colores personalizados:

http://sree.cc/google/android/defining-custom-colors-using-xml-in-android

EDIT (1): Dado que getColor(int id) está en desuso ahora, debe usarse:

ContextCompat.getColor(context, R.color.your_color);

(agregado en la biblioteca de soporte 23)

EDITAR (2):

El código que se muestra a continuación se puede usar para Marshmallow anterior y posterior (API 23)

ResourcesCompat.getColor(getResources(), R.color.your_color, null); //without theme ResourcesCompat.getColor(getResources(), R.color.your_color, your_theme); //with theme


ContextCompat.getColor(context, R.color.your_color); para usar ContextCompat.getColor(context, R.color.your_color); pero a veces (en algunos dispositivos / versiones de Android. No estoy seguro) eso causa una excepción NullPointerExcepiton.

Entonces, para hacer que funcione en todos los dispositivos / versiones, recurro a la antigua forma de hacerlo, en el caso de un puntero nulo.

try { textView.setTextColor(ContextCompat.getColor(getActivity(), R.color.text_grey_dark)); } catch(NullPointerException e) { if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { textView.setTextColor(getContext().getColor(R.color.text_grey_dark)); } else { textView.setTextColor(getResources().getColor(R.color.text_grey_dark)); } }