Is there any way to get a color-int from a color resource?
I am trying to get the individual red, blue and green components of a color defined in the resource (R.color.myColor) so that I can set the values of three seekbars to a specific level.
Is there any way to get a color-int from a color resource?
I am trying to get the individual red, blue and green components of a color defined in the resource (R.color.myColor) so that I can set the values of three seekbars to a specific level.
 
    
    You can use:
getResources().getColor(R.color.idname);
Check here on how to define custom colors:
http://sree.cc/google/android/defining-custom-colors-using-xml-in-android
EDIT(1):
Since getColor(int id) is deprecated now, this must be used :
ContextCompat.getColor(context, R.color.your_color);
(added in support library 23)
EDIT(2):
Below code can be used for both pre and post Marshmallow (API 23)
ResourcesCompat.getColor(getResources(), R.color.your_color, null); //without theme
ResourcesCompat.getColor(getResources(), R.color.your_color, your_theme); //with theme
 
    
     
    
    Based on the new Android Support Library (and this update), now you should call:
ContextCompat.getColor(context, R.color.name.color);
According to the documentation:
public int getColor (int id)
This method was deprecated in API level 23. Use getColor(int, Theme) instead
It is the same solution for getResources().getColorStateList(id):
You have to change it like this:
ContextCompat.getColorStateList(getContext(),id);
EDIT 2019
Regarding ThemeOverlay use the context of the closest view:
val color = ContextCompat.getColor(
  closestView.context,
  R.color.name.color
)
So this way you get the right color based on your ThemeOverlay.
Specially needed when in same activity you use different themes, like dark/light theme. If you would like to understand more about Themes and Styles this talk is suggested: Developing Themes with Style
 
    
    values/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>
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);
 
    
    Found an easier way that works as well:
Color.parseColor(getString(R.color.idname));
 
    
    As @sat answer, good approach for getting color is
ResourcesCompat.getColor(getResources(), R.color.your_color, null);
or use below way when you don't have access to getResources() method.
Context context  = getContext(); // like Dialog class
ResourcesCompat.getColor(context.getResources(), R.color.your_color, null);
public void someMethod(){
    ...
    ResourcesCompat.getColor(App.getRes(), R.color.your_color, null);
}
It is most simple to use anywhere in your app! Even in Util class or any class where you don't have Context or getResource()
When you don't have Context access, like a method in your Util class.
Assume below method without Context.
public void someMethod(){
    ...
    // can't use getResource() without Context.
}
Now you will pass Context as a parameter in this method and use getResources().
public void someMethod(Context context){
    ...
    context.getResources...
}
So here is a Bonus unique solution by which you can access resources from anywhere like Util class .
Add Resources to your Application class or Create one if does not exist.
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;
    }
}
Add name field to your manifest.xml <application tag. (If not added already)
<application
        android:name=".App"
        ...
        >
        ...
    </application>
Now you are good to go. Use ResourcesCompat.getColor(App.getRes(), R.color.your_color, null); anywhere in app.
 
    
    If your current min. API level is 23, you can simply use getColor() like we are using for getString():
//example
textView.setTextColor(getColor(R.color.green));
// if context is not available(ex: not in activity) use with context.getColor()
If you want below API level 23, just use this:
textView.setTextColor(getResources().getColor(R.color.green));
But note that getResources().getColor() is deprecated in API Level 23. In that case replace above with:
textView.setTextColor(ContextCompat.getColor(this /*context*/, R.color.green)) //Im in an activity, so I can use `this`
ContextCompat: Helper for accessing features in Context
If You want, you can constraint with SDK_INT like below:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
    textView.setTextColor(getColor(R.color.green));
} else {
    textView.setTextColor(getResources().getColor(R.color.green));
}
 
    
    I updated to use ContextCompat.getColor(context, R.color.your_color); but sometimes (On some devices/Android versions. I'm not sure) that causes a NullPointerExcepiton.
So to make it work on all devices/versions, I fall back on the old way of doing it, in the case of a null pointer.
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));
    }
}
 
    
    For more information on another use-case that may help surface this question in search results, I wanted to apply alpha to a color defined in my resources.
Using @sat's correct answer:
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)
);
 
    
    ContextCompat.getColor(context, R.color.your_color);
in activity
ContextCompat.getColor(actvityname.this, R.color.your_color);
in fragment
ContextCompat.getColor(getActivity(), R.color.your_color);
for example:
tvsun.settextcolour(ContextCompat.getColor(getActivity(), R.color.your_color))
 
    
     
    
    Accessing colors from a non-activity class can be difficult. One of the alternatives that I found was using enum. enum offers a lot of flexibility.
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;
  }
}
 
    
    or if you have a function(string text,string color) and you need to pass the Resource Color String you can do as follow
String.valueOf(getResources().getColor(R.color.enurse_link_color))
 
    
     
    
    In kotlin just use this in your activity
R.color.color_name
ex-
mytextView.setTextColor(R.color.red_900)
