Wie würde man die in Styles, wie unten, programmierte Akzentfarbe holen?Wie Akzent Farbe programmgesteuert erhalten?
<item name="android:colorAccent">@color/material_green_500</item>
Wie würde man die in Styles, wie unten, programmierte Akzentfarbe holen?Wie Akzent Farbe programmgesteuert erhalten?
<item name="android:colorAccent">@color/material_green_500</item>
Sie können es aus dem aktuellen Thema holen auf diese Weise:
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;
}
Dieser arbeitete für mich auch:
public static int getThemeAccentColor (final Context context) {
final TypedValue value = new TypedValue();
context.getTheme().resolveAttribute (R.attr.colorAccent, value, true);
return value.data;
}
Ich bekomme das gleiche Problem auch in dieser Lösung, negetive Wert, und es fällt :( – batsheva
Negativer Wert ist in Ordnung. Es ist eine Farbe! – copolii
aber meine Anwendung zerbricht mit Eror nein resource found ... das passiert nicht, wenn ich eine reguläre Farbe anlege, also ist der Wert nicht gut – batsheva
Ich habe eine statische Methode auf einer utils-Klasse Holen Sie sich die Farben aus dem aktuellen Thema. Meistens ist es colorPrimary, colorPrimaryDark und accentColor, aber Sie können viel mehr bekommen.
@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;
}
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;
}
Dies ist die einzige Antwort, die nicht auf dem Importieren der App R-Klasse beruht, die sich ideal zum Erstellen benutzerdefinierter Ansichten eignet. – Magritte
Jeder Abwärts Abstimmung in der Tat sehr frei fühlen sollte, ihre Gedanken in Kommentar zu schreiben ... – Jakob