Comment récupérer la couleur d'accentuation définie dans les styles, comme ci-dessous, par programmation?
<item name="android:colorAccent">@color/material_green_500</item>
Comment récupérer la couleur d'accentuation définie dans les styles, comme ci-dessous, par programmation?
<item name="android:colorAccent">@color/material_green_500</item>
Réponses:
Vous pouvez le récupérer à partir du thème actuel de cette manière:
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; }
la source
Cela a fonctionné pour moi aussi:
public static int getThemeAccentColor (final Context context) { final TypedValue value = new TypedValue (); context.getTheme ().resolveAttribute (R.attr.colorAccent, value, true); return value.data; }
la source
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; }
la source
Pour ceux d'entre vous qui utilisent Kotlin
fun Context.themeColor(@AttrRes attrRes: Int): Int { val typedValue = TypedValue() theme.resolveAttribute (attrRes, typedValue, true) return typedValue.data }
la source
J'ai une méthode statique sur une classe utils pour obtenir les couleurs du thème actuel. La plupart du temps, il s'agit de colorPrimary, colorPrimaryDark et accentColor, mais vous pouvez en obtenir beaucoup plus.
@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; }
la source
Voici mon point de vue sur ceci:
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)); }
Usage:
String windowBackgroundHex = getThemeColorInHex(this, "windowBackground", android.R.attr.windowBackground); String primaryColorHex = getThemeColorInHex(this, "colorPrimary", R.attr.colorPrimary);
la source
String.format()
aide à expliquer comment convertir la valeur entière négative en une chaîne de couleur hexadécimale.Solution Kotlin:
context.obtainStyledAttributes(TypedValue().data, intArrayOf(R.attr.colorAccent)).let { Log.d("AppLog", "color:${it.getColor(0, 0).toHexString()}") it.recycle() }
la source