Bedenken Sie:
styles.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>
Die Themenfarbe wird also vom Thema referenziert. Wie kann ich die theme_color (Referenz) programmgesteuert abrufen? Normalerweise würde ich verwenden, getResources().getColor()
aber nicht in diesem Fall, weil es referenziert!
android
android-resources
android-theme
Seraphims
quelle
quelle
ContextThemeWrapper
mit der Themen-ID erstellen und dann das Thema daraus abrufen.Hinzufügen zur akzeptierten Antwort, wenn Sie Kotlin verwenden.
und dann können Sie in Ihrer Aktivität tun
textView.setTextColor(getColorFromAttr(R.attr.color))
quelle
@ColorInt fun Context.getThemeColor(@AttrRes attribute: Int) = TypedValue().let { theme.resolveAttribute(attribute, it, true); it.data }
val errorColor = context.getThemeColor(R.attr.colorError)
ColorStateList
:@ColorInt fun Context.getThemeColor(@AttrRes attribute: Int) = obtainStyledAttributes(intArrayOf(attribute)).use { it.getColor(0, Color.MAGENTA) }
(von Nick Butcher )ColorStateList
, auch wenn auf andere Themenattribute verwiesen wird:fun Context.getThemeColor(@AttrRes attribute: Int): ColorStateList = TypedValue().let { theme.resolveAttribute(attribute, it, true); AppCompatResources.getColorStateList(this, it.resourceId) }
(Einzelne Farben werden ebenfalls in eine eingeschlossenColorStateList
).Das hat bei mir funktioniert:
Wenn Sie den Hexstring herausholen möchten:
quelle
Wenn Sie mehrere Farben erhalten möchten, können Sie Folgendes verwenden:
quelle
Fügen Sie dies Ihrem build.gradle (App) hinzu:
Und fügen Sie diese Erweiterungsfunktion irgendwo in Ihren Code ein:
quelle
Hier ist eine übersichtliche Java-Dienstprogrammmethode, die mehrere Attribute verwendet und ein Array von Farb-Ganzzahlen zurückgibt. :) :)
quelle
Für diejenigen, die Bezugnahme auf eine ziehbar suchen Sie verwenden sollten
false
inresolveRefs
theme.resolveAttribute(R.attr.some_drawable, typedValue, **false**);
quelle