जवाबों:
आप उपयोग कर सकते हैं:
getResources().getColor(R.color.idname);
कस्टम रंगों को परिभाषित करने के तरीके के बारे में यहां देखें:
http://sree.cc/google/android/defining-custom-colors-using-xml-in-android
संपादित करें (1):
के बाद से getColor(int id)
किया गया है पदावनत अब, इस इस्तेमाल किया जाना चाहिए:
ContextCompat.getColor(context, R.color.your_color);
(समर्थन पुस्तकालय 23 में जोड़ा गया)
संपादित करें (2):
नीचे दिए गए कोड का उपयोग प्री और पोस्ट मार्शमैलो (एपीआई 23) दोनों के लिए किया जा सकता है
ResourcesCompat.getColor(getResources(), R.color.your_color, null); //without theme
ResourcesCompat.getColor(getResources(), R.color.your_color, your_theme); //with theme
android.R.color.some_color
बहुत अधिक काम करता है जैसे: getResources().getColor(android.R.color.holo_blue_bright)
(कम से कम, एपीआई 17 पर)
ContextCompat
और ResourcesCompat
? यदि कोई व्यावहारिक अंतर नहीं है, तो यह कम भ्रामक होगा यदि आपने उनमें से एक को अपने उत्तर से हटा दिया।
नए एंड्रॉइड सपोर्ट लाइब्रेरी (और इस अपडेट) के आधार पर , अब आपको कॉल करना चाहिए:
ContextCompat.getColor(context, R.color.name.color);
प्रलेखन के अनुसार :
public int getColor (int id)
इस विधि को एपीआई स्तर 23 में पदावनत किया गया था । इसके बजाय getColor (int, Theme) का उपयोग करें
यह इसके लिए एक ही समाधान है getResources().getColorStateList(id)
:
आपको इसे इस तरह बदलना होगा:
ContextCompat.getColorStateList(getContext(),id);
EDIT 2019
ThemeOverlay
निकटतम दृश्य के संदर्भ का उपयोग करने के बारे में :
val color = ContextCompat.getColor(
closestView.context,
R.color.name.color
)
तो इस तरह से आपको अपने ThemeOverlay के आधार पर सही रंग मिलता है।
विशेष रूप से आवश्यक है जब एक ही गतिविधि में आप विभिन्न विषयों का उपयोग करते हैं, जैसे कि अंधेरे / प्रकाश विषय। यदि आप थीम्स और स्टाइल्स के बारे में अधिक समझना चाहते हैं तो इस बात का सुझाव दिया जाता है: स्टाइल के साथ थीम विकसित करना
Theme
उन्हें अशक्त के रूप में पारित किया जा सकता है, इसलिए कॉल करें getColor(R.color.my_color, null)
कि क्या आप अनिश्चित हैं कि किस विषय में पास होना है।
मान / 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);
getResources()
में उपयोग कर सकते हैं ? Activity
Fragment
getResources()
कॉन्टेक्ट को लागू करने वाली किसी भी चीज पर एक सार्वजनिक एपीआई के रूप में भी उपलब्ध है और व्यूज पर भी।
@ जवाब के रूप में, रंग प्राप्त करने के लिए अच्छा तरीका है
ResourcesCompat.getColor(getResources(), R.color.your_color, null);
या जब आप getResources()
विधि तक नहीं पहुँचते हैं तो नीचे दिए गए तरीके का उपयोग करें ।
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);
}
अपने ऐप में कहीं भी उपयोग करना सबसे सरल है! यहाँ तक कि Util क्लास या किसी भी क्लास में जहाँ आपके पास Context या getResource नहीं है ()
जब आपकी Context
पहुंच नहीं होती है , तो अपनी Util
कक्षा में एक विधि की तरह ।
कॉनटेक्स्ट के बिना विधि नीचे मान लें।
public void someMethod(){
...
// can't use getResource() without Context.
}
अब आप Context
इस पद्धति में एक पैरामीटर के रूप में पास होंगे और उपयोग करेंगेgetResources().
public void someMethod(Context context){
...
context.getResources...
}
तो यहाँ एक बोनस अद्वितीय समाधान है जिसके द्वारा आप संसाधनों को कहीं से भी एक्सेस कर सकते हैं Util class
। Resources
अपनी Application
कक्षा में जोड़ें या मौजूद न होने पर एक बनाएँ।
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;
}
}
अपने manifest.xml
<application
टैग में नाम फ़ील्ड जोड़ें । (यदि पहले से नहीं जोड़ा गया है)
<application
android:name=".App"
...
>
...
</application>
अब आप जाने के लिए अच्छे हैं। ResourcesCompat.getColor(App.getRes(), R.color.your_color, null);
अनुप्रयोग में कहीं भी उपयोग करें ।
मैंने उपयोग करने के लिए अद्यतन किया, ContextCompat.getColor(context, R.color.your_color);
लेकिन कभी-कभी (कुछ उपकरणों / Android संस्करणों पर। मुझे यकीन नहीं है) जो NullPointerExcepiton का कारण बनता है।
इसलिए इसे सभी उपकरणों / संस्करणों पर काम करने के लिए, मैं इसे करने के पुराने तरीके पर वापस आता हूं, एक अशक्त सूचक के मामले में।
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));
}
}
Resources.getColor(int, Theme)
तो यदि आप कर सकते हैं तो नए एपीआई का उपयोग करें ? आपको रनटाइम अपवादों को नहीं पकड़ना चाहिए।
एक अन्य उपयोग-मामले के बारे में अधिक जानकारी के लिए जो खोज परिणामों में इस प्रश्न को समझने में मदद कर सकता है, मैं अल्फा को अपने संसाधनों में परिभाषित रंग पर लागू करना चाहता था।
@ 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)
);
एक आसान तरीका मिला जो काम करता है:
Color.parseColor(getString(R.color.idname);
गैर-गतिविधि वर्ग से रंगों तक पहुंचना मुश्किल हो सकता है। मेरे द्वारा पाया गया विकल्पों में से एक उपयोग कर रहा था enum
। enum
बहुत लचीलापन प्रदान करता है।
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;
}
}
सबसे हाल की कार्य पद्धति:
getColor(R.color.snackBarAction)
यदि आपका वर्तमान मि। एपीआई स्तर 23 है, आप बस इसका उपयोग कर सकते हैं getColor()
जैसे हम उपयोग कर रहे हैं getString()
:
//example
textView.setTextColor(getColor(R.color.green));
// if context is not available(ex: not in activity) use with context.getColor()
यदि आप नीचे एपीआई स्तर चाहते हैं 23
, तो बस इसका उपयोग करें:
textView.setTextColor(getResources().getColor(R.color.green));
लेकिन ध्यान दें कि getResources().getColor()
एपीआई स्तर में अपदस्थ किया गया है 23
। उस मामले में ऊपर से बदलें:
textView.setTextColor(ContextCompat.getColor(this /*context*/, R.color.green)) //Im in an activity, so I can use `this`
ContextCompat : में सुविधाओं तक पहुँचने के लिए सहायकContext
यदि आप चाहें, तो आप SDK_INT
नीचे की तरह बाधा डाल सकते हैं:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
textView.setTextColor(getColor(R.color.green));
} else {
textView.setTextColor(getResources().getColor(R.color.green));
}
ContextCompat.getColor(context, R.color.your_color);
गतिविधि में
ContextCompat.getColor(actvityname.this, R.color.your_color);
टुकड़े में
ContextCompat.getColor(getActivity(), R.color.your_color);
उदाहरण के लिए:
tvsun.settextcolour(ContextCompat.getColor(getActivity(), R.color.your_color))