Rozważ to:
style.xml
<style name="BlueTheme" parent="@android:style/Theme.Black.NoTitleBar">
<item name="theme_color">@color/theme_color_blue</item>
</style>
attrs.xml
<attr name="theme_color" format="reference" />
color.xml
<color name="theme_color_blue">#ff0071d3</color>
Więc kolor motywu jest powiązany z motywem. Jak programowo uzyskać atrybut theme_color (reference)? Normalnie użyłbym, getResources().getColor()
ale nie w tym przypadku, ponieważ jest on przywoływany!
android
android-resources
android-theme
Serafinów
źródło
źródło
ContextThemeWrapper
przy użyciu identyfikatora motywu, a następnie pobrać z niego motyw.Aby dodać do zaakceptowanej odpowiedzi, jeśli używasz kotlin.
a potem w swojej działalności możesz to zrobić
textView.setTextColor(getColorFromAttr(R.attr.color))
źródło
@ColorInt fun Context.getThemeColor(@AttrRes attribute: Int) = TypedValue().let { theme.resolveAttribute(attribute, it, true); it.data }
(źle sformatowane tutaj, ale jest ok)val errorColor = context.getThemeColor(R.attr.colorError)
ColorStateList
:@ColorInt fun Context.getThemeColor(@AttrRes attribute: Int) = obtainStyledAttributes(intArrayOf(attribute)).use { it.getColor(0, Color.MAGENTA) }
(od Nicka Butchera )ColorStateList
, nawet jeśli odwołuje się do innych atrybutów motywu:fun Context.getThemeColor(@AttrRes attribute: Int): ColorStateList = TypedValue().let { theme.resolveAttribute(attribute, it, true); AppCompatResources.getColorStateList(this, it.resourceId) }
(pojedyncze kolory też będą opakowaneColorStateList
).To zadziałało dla mnie:
jeśli chcesz wyciągnąć z niego szesnastkowy ciąg:
źródło
Jeśli chcesz uzyskać wiele kolorów, możesz użyć:
źródło
Dodaj to do swojego build.gradle (aplikacji):
I dodaj tę funkcję rozszerzenia gdzieś w swoim kodzie:
źródło
Oto zwięzła metoda narzędzia Java, która pobiera wiele atrybutów i zwraca tablicę liczb całkowitych w kolorze. :)
źródło
Dla tych, którzy szukają odniesienia do rysunków, powinieneś użyć
false
wresolveRefs
theme.resolveAttribute(R.attr.some_drawable, typedValue, **false**);
źródło