ilomambo
ilomambo

Reputation: 8350

Initialize int with resource defined color

I have a resource file where I define colors:

colors.xml:

...
<color name="White">#FFFFFF</color>
<color name="Ivory">#FFFFF0</color>
<color name="LightYellow">#FFFFE0</color>
<color name="Yellow">#FFFF00</color>
<color name="Snow">#FFFAFA</color>
<color name="FloralWhite">#FFFAF0</color>
<color name="LemonChiffon">#FFFACD</color>
<color name="Cornsilk">#FFF8DC</color>
<color name="Seashell">#FFF5EE</color>
<color name="LavenderBlush">#FFF0F5</color>
<color name="PapayaWhip">#FFEFD5</color>
...

And I would like to initialize int fields in a class with a color value from that list (not the color ID, the color value)

class MyClass {

   private int color1 = ?????;
   private int color2 = ?????;

   ...

Is it doable?
I tried Resources.getSystem().getColor(R.color.White); but I get:

12-23 11:22:36.016: E/AndroidRuntime(14646): Caused by: android.content.res.Resources$NotFoundException: Resource ID #0x7f0b0016

Upvotes: 1

Views: 965

Answers (1)

Pradip
Pradip

Reputation: 3177

Use getResources() like below-

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

instead of

Resources.getSystem().getColor(R.color.White);

According to Android documentation, Resources.getSystem() only provides system-level resources, not application-level ones (like the resources inside your strings.xml file).

Update: To make context available in your class-

public class MyClass{
    Context context;
    MyClass(Context ctx){
        this.context = ctx;
    }
// your other stuff here
// Now you can access the context. like 
/* context.getResources().getColor(R.color.White); */
}

Upvotes: 2

Related Questions