উত্তর:
তুমি ব্যবহার করতে পার:
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)
এই পদ্ধতিটি API স্তরের 23 স্তরে অবনতি হয়েছে । পরিবর্তে getColor (int, থিম) ব্যবহার করুন
এটি একই সমাধান getResources().getColorStateList(id)
:
আপনাকে এটিকে এভাবে পরিবর্তন করতে হবে:
ContextCompat.getColorStateList(getContext(),id);
2019 এর সম্পাদনা করুন
ThemeOverlay
নিকটতম দৃশ্যের প্রসঙ্গে ব্যবহার সম্পর্কে :
val color = ContextCompat.getColor(
closestView.context,
R.color.name.color
)
সুতরাং এইভাবে আপনি আপনার থিম ওভারলে এর উপর ভিত্তি করে সঠিক রঙটি পান।
অন্ধকার / হালকা থিমের মতো একই ক্রিয়াকলাপে আপনি যখন বিভিন্ন থিম ব্যবহার করেন তখন বিশেষ প্রয়োজন। আপনি থিম এবং স্টাইলগুলি সম্পর্কে আরও জানতে চাইলে এই আলাপটি প্রস্তাবিত: স্টাইলের সাথে থিমগুলি বিকাশ করা
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()
।
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);
}
আপনার অ্যাপের যে কোনও জায়গায় ব্যবহার করা সবচেয়ে সহজ! এমনকি ইউটিলি ক্লাসে বা এমন কোনও ক্লাসে যেখানে আপনার কনটেক্সট বা গেট রিসোর্স নেই ()
আপনার ক্লাসে কোনও পদ্ধতির মতো আপনার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);
তবে কখনও কখনও (কিছু ডিভাইস / অ্যান্ড্রয়েড সংস্করণে I'm
সুতরাং এটি সমস্ত ডিভাইস / সংস্করণে কাজ করার জন্য, আমি নাল পয়েন্টারের ক্ষেত্রে এটি করার পুরানো পদ্ধতিতে ফিরে আসি।
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)
যদি আপনি পারেন তবে নতুন এপিআই ব্যবহার করবেন ? আপনার রানটাইম ব্যতিক্রমগুলি ধরা উচিত নয়।
অনুসন্ধানের ফলাফলগুলিতে এই প্রশ্নটি উত্সাহিত করতে পারে এমন অন্য ব্যবহারের ক্ষেত্রে আরও তথ্যের জন্য, আমি আমার সংস্থানগুলিতে বর্ণিত রঙে আলফা প্রয়োগ করতে চেয়েছিলাম।
@ স্যাট এর সঠিক উত্তরটি ব্যবহার করে:
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`
প্রসঙ্গকম্প্যাট : বৈশিষ্ট্যগুলিতে অ্যাক্সেসের জন্য সহায়ক HelpContext
আপনি চাইলে 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))