Ich verwende benutzerdefinierte Attribute, um den Themenwechsel in meiner Anwendung zu implementieren. Ich habe das folgende Attribut definiert:
<resources>
<attr name="TextAppearance_Footer" format="reference"></attr>
</resources>
Ich habe zwei Themen, die dieses Attribut unterschiedlich definieren:
<style name="NI_AppTheme.Dark">
<item name="TextAppearance_Footer">@style/Footer</item>
</style>
En @style/Footer
ist wie folgt definiert:
<style name="Footer" parent="@android:style/TextAppearance.Large">
<item name="android:textColor">#00FF00</item> // Green
</style>
Wenn ich nun versuche, diesen Stil auf eine TextView
verwenden:
textView.setTextAppearance(this, R.attr.TextAppearance_Footer);
Es funktioniert nicht (d.h. der Text wird nicht auf Grün gesetzt). Wenn ich jedoch das Aussehen des Textes über xml mit angeben:
android:textAppearance="?TextAppearance_Footer"
Es funktioniert gut. Was könnte ich übersehen? Ich muss die Attribute festlegen, weil ich dynamisch zwischen Themen wechseln möchte.
Zusätzliche Informationen:
Wenn ich benutze:
textView.setTextAppearance(this, R.style.NI_AppTheme.Dark);
Es scheint gut zu funktionieren.
EDIT: Getestete funktionierende Lösung (danke @nininho):
Resources.Theme theme = getTheme();
TypedValue styleID = new TypedValue();
if (theme.resolveAttribute(R.attr.Channel_Title_Style, styleID, true)) {
channelTitle.setTextAppearance(this, styleID.data);
}