প্রোগ্রামের মতো নীচের মতো শৈলীতে কীভাবে অ্যাকসেন্ট রঙ সেট আনতে হবে?
<item name="android:colorAccent">@color/material_green_500</item>
উত্তর:
আপনি এটি বর্তমান থিম থেকে এভাবে আনতে পারেন:
private int fetchAccentColor() {
TypedValue typedValue = new TypedValue();
TypedArray a = mContext.obtainStyledAttributes(typedValue.data, new int[] { R.attr.colorAccent });
int color = a.getColor(0, 0);
a.recycle();
return color;
}
এটি আমার পক্ষেও কাজ করেছে:
public static int getThemeAccentColor (final Context context) {
final TypedValue value = new TypedValue ();
context.getTheme ().resolveAttribute (R.attr.colorAccent, value, true);
return value.data;
}
private static int getThemeAccentColor(Context context) {
int colorAttr;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
colorAttr = android.R.attr.colorAccent;
} else {
//Get colorAccent defined for AppCompat
colorAttr = context.getResources().getIdentifier("colorAccent", "attr", context.getPackageName());
}
TypedValue outValue = new TypedValue();
context.getTheme().resolveAttribute(colorAttr, outValue, true);
return outValue.data;
}
বর্তমান থিমটি থেকে রঙ পেতে আমার কাছে একটি ইউলস ক্লাসে একটি স্ট্যাটিক পদ্ধতি রয়েছে। বেশিরভাগ সময় কালারপ্রাইমারি, কালারপ্রিমারি ডার্ক এবং অ্যাকসেন্ট কালার হয় তবে আপনি আরও অনেক কিছু পেতে পারেন।
@ColorInt
public static int getThemeColor
(
@NonNull final Context context,
@AttrRes final int attributeColor
)
{
final TypedValue value = new TypedValue();
context.getTheme ().resolveAttribute (attributeColor, value, true);
return value.data;
}
এই আমার গ্রহণ করা এখানে:
public static String getThemeColorInHex(@NonNull Context context, @NonNull String colorName, @AttrRes int attribute) {
TypedValue outValue = new TypedValue();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
context.getTheme().resolveAttribute(attribute, outValue, true);
} else {
// get color defined for AppCompat
int appCompatAttribute = context.getResources().getIdentifier(colorName, "attr", context.getPackageName());
context.getTheme().resolveAttribute(appCompatAttribute, outValue, true);
}
return String.format("#%06X", (0xFFFFFF & outValue.data));
}
ব্যবহার:
String windowBackgroundHex = getThemeColorInHex(this, "windowBackground", android.R.attr.windowBackground);
String primaryColorHex = getThemeColorInHex(this, "colorPrimary", R.attr.colorPrimary);
String.format()
কিভাবে একটি হেক্স রঙ স্ট্রিং নেতিবাচক পূর্ণসংখ্যা মান রূপান্তর করতে ব্যাখ্যা করতে সাহায্য করে।
কোটলিন সমাধান:
context.obtainStyledAttributes(TypedValue().data, intArrayOf(R.attr.colorAccent)).let {
Log.d("AppLog", "color:${it.getColor(0, 0).toHexString()}")
it.recycle()
}
আপনি যদি এটি একক লাইন হতে চান তবে মেটেরিয়ালিয়ান এই ক্ষেত্রে ব্যবহার করা যেতে পারে
MaterialColors.getColor(context, R.attr.colorAccent,context.getResources().getColor(R.color.fall_back_color));
প্রথম আর্গুমেন্টটি প্রসঙ্গটি হ'ল দ্বিতীয় যুক্তিটি আপনাকে যে বৈশিষ্ট্যটি অর্জন করতে হবে তা হ'ল এবং তৃতীয় যুক্তিটি ফ্যালব্যাক রঙ হ'ল বৈশিষ্ট্যটি অনুপস্থিত বা বৈশিষ্ট্যের রঙ পাওয়ার সময় কিছু ভুল হয়ে গেছে