2017-01-26 4 views
0

Mein Thema:resolveAttribute gibt immer null für Attribute

<style name="AppThemeDark" parent="Theme.AppCompat"> 
    <item name="AppButton">@drawable/standard_dark_button_selector</item> 
</style>  

Dieser Code verwende ich ein Themen-ziehbar zu bekommen:

public static Drawable getThemedDrawable(Context context, int resource) { 
    TypedValue typedValue = new TypedValue(); 
    Resources.Theme theme = context.getTheme(); 
    theme.resolveAttribute(resource, typedValue, true); 
    if(typedValue.resourceId == 0) { 
     return context.getResources().getDrawable(R.drawable.standard_theme_not_found); 
    } 
    else 
     return context.getResources().getDrawable(typedValue.resourceId); 
} 

Und das ist der direkte Aufruf:

positive.setBackgroundDrawable(Theme.getThemedDrawable(getBaseContext(), R.attr.AppButton)); 

Die typedValue.resourceId ist immer 0 und gibt keine echte zeichenorientierte Ressourcen-ID zurück. In diesem Fall wird immer R.drawable.standard_theme_not_f zurückgegeben ound.

Wenn ich diesen Code mit Farben (aus typedValue.data) verwendet, ist es gefüllt und funktioniert.

Wie kann ich das lösen?

Antwort

-1

Ich fand die Antwort selbst, es ist wichtig, dass das Thema im Kontext richtig eingestellt ist.

, wenn Sie gelten ein Thema programmatisch:

setTheme(myTheme); 

dann wird das Thema nicht in der getBaseContext gespeichert()

so müssen Sie

Theme.getThemedDrawable(myActivity, R.attr.AppContainer1Background) 

statt

verwenden
Theme.getThemedDrawable(getBaseContext(), R.attr.AppContainer1Background) 
Verwandte Themen