6 Stimmen

setTextAppearance durch Code, der auf ein benutzerdefiniertes Attribut verweist

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);
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X