Как выбрать цвет акцента, заданный в стилях, например ниже, программно?Как получить цвет акцента программным путем?
<item name="android:colorAccent">@color/material_green_500</item>
Как выбрать цвет акцента, заданный в стилях, например ниже, программно?Как получить цвет акцента программным путем?
<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;
}
Я получаю такую же проблему и в этом решении, значение negetive, и оно падает :( – batsheva
Отрицательное значение в порядке. Это цвет! – copolii
, но мое приложение прорывается вниз с eroor no найденный ресурс ... это не происходит, когда я добавляю обычный цвет! так что значение не является хорошим – batsheva
У меня есть статический метод класса Utils к получить цвета из текущей темы. Чаще всего это colorPrimary, colorPrimaryDark и accentColor, но вы можете получить намного больше.
@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;
}
Это единственный ответ, который не зависит от импорта класса приложения R, который идеально подходит для создания пользовательских представлений. – Magritte
Любой вниз голосования должны чувствовать себя очень свободно действительно размещать свои мысли в комментариях ... – Jakob