Come si può recuperare il colore dell'accento impostato negli stili, come di seguito, a livello di programmazione?Come ottenere il colore di accento programmaticamente?
<item name="android:colorAccent">@color/material_green_500</item>
Come si può recuperare il colore dell'accento impostato negli stili, come di seguito, a livello di programmazione?Come ottenere il colore di accento programmaticamente?
<item name="android:colorAccent">@color/material_green_500</item>
È possibile recuperare dal tema corrente in questo modo:
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;
}
Questo ha funzionato anche per me:
public static int getThemeAccentColor (final Context context) {
final TypedValue value = new TypedValue();
context.getTheme().resolveAttribute (R.attr.colorAccent, value, true);
return value.data;
}
Ho lo stesso problema anche in questa soluzione, valore negetive, e cade :( – batsheva
Il valore negativo va bene. È un colore! – copolii
ma la mia aplicazione si abbassa con eroor no risorsa trovata ... non è una cosa felice quando inserisco un colore normale! quindi il valore non è corretto – batsheva
Ho un metodo statico su una classe utils per ottenere i colori dal tema corrente. La maggior parte delle volte è colorPrimary, colorPrimaryDark e accentColor, ma puoi ottenere molto di più.
@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;
}
Questa è l'unica risposta che non si basa sull'importazione della classe R dell'app, ideale per la creazione di visualizzazioni personalizzate. – Magritte
Chiunque down-voto dovrebbe sentirsi molto liberi davvero per pubblicare i loro pensieri in commento ... – Jakob