from - resource color android




Obtener color-int del recurso de color (4)

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.


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






colors