2017-02-01 10 views
2

Ich muss einen Standardwert aus einem Thema, aber nicht aus dem aktuellen Thema extrahieren.So erhalten Sie ein Thema durch seine Referenz-ID

Ich weiß, dass ich die Attribute aus dem aktuellen Thema wie diese erhalten bekommen kann:

TypedValue typedValue = new TypedValue(); 
Theme currentTheme = context.getTheme(); 
currentTheme.resolveAttribute(android.R.attr.windowBackground, typedValue, true); 
// result is in: typedValue.data 

aber ich brauche so etwas wie:

Theme darkTheme = getTheme(R.style.AppTheme.Dark); 

... Ich brauche nur zu extrahieren Einzelwert, ich möchte das aktuelle Thema nicht ändern.

+1

Vielleicht so etwas wie 'Theme darkTheme = new ContextThemeWrapper (getBaseContext(), R.style.AppTheme.Dark) .getTheme();'. Das scheint irgendwie ein Karussell zu sein, aber ich bin mir nicht sicher, ob es einen Weg gibt, ein 'Theme' direkt zu instanziieren. Ich muss graben. –

+0

sieht vielversprechend aus, es gerade auszuprobieren –

+0

funktioniert gut genug für mich, wenn Sie es in eine Antwort setzen, werde ich es akzeptieren –

Antwort

4

Es sieht aus wie wir dies tun können, indem eine temporäre ContextThemeWrapper mit dem gewünschten Thema, um unsere Basis Context zu schaffen, obwohl ich alle verfügbaren Context glauben machen, wie der Wrapper alle Attributwerte in dem gegebenen Thema vorhanden ersetzen soll.

Theme darkTheme = new ContextThemeWrapper(getBaseContext(), R.style.AppTheme_Dark).getTheme(); 

Eine weitere Option ist wie folgt. Dies könnte vorzuziehen sein, da es so aussieht, als ob ein Theme keinen Verweis auf irgendeine Context enthält.

Theme darkTheme = getResources().newTheme(); 
darkTheme.applyStyle(R.style.AppTheme_Dark, true); 
+0

Es funktioniert für meinen Fall, ich benutze es am Ende einer Aktivität, um ein Cache-Bild zu erstellen. Ich weiß nicht, ob es sich negativ auf die Aktivität auswirkt, wenn Sie weiter damit arbeiten. –

+1

Anders gefunden. Ich denke, das könnte ein bisschen besser sein, da wir keinen "Kontext" ohne guten Grund herumwerfen. –

+1

Cool, die zweite Option funktioniert auch, und ja, ich mag es auch besser. –

Verwandte Themen