2013-04-04 17 views
5

Ich stelle fest, für Context.getTheme(), es in der Regel nicht gut funktioniert, wenn wir Application als ContextWarum getTheme nicht gut auf Anwendung funktioniert

MyApplication.singletonInstance().getTheme().resolveAttribute(R.attr.actionBarDeleteIcon, typedValue, true); 
// typedValue.resourceId will be 0x0, which is invalid 

jedoch verwenden, wenn ich Activity als Kontext verwenden, es funktioniert gut

MyFragment.this.getActivity().getTheme().resolveAttribute(R.attr.actionBarDeleteIcon, typedValue, true); 
// typedValue.resourceId is valid 

ich mich gefragt, warum wir schreiben durch Application nicht lösen können?

In Manifest finden wir spezifische Themeninformationen bei Application Ebene. Also, ich dachte, das Thema von Application Objekt zu bekommen macht Sinn.

<application 
    android:theme="..." 

Antwort

3

Es funktioniert nicht, weil offenbar das von getApplicationContext() zurückgegebene Objekt nicht um ein vollständiges Context Objekt ist, wie in this answer by CommonsWare bemerkt:

Es ist kein komplettes Context, alles zu unterstützen, die Activity tut. Verschiedene Dinge, die Sie versuchen, mit diesem Context zu tun, werden fehlschlagen, meist im Zusammenhang mit der GUI.

Eine mögliche Lösung ist manuell das Thema setzen an diesen Context, wie folgt aus:

getApplicationContext().getTheme().applyStyle(R.style.MyTheme, true); 

Aber diese Methode ist nicht von der Android Dev-Team unterstützt; Die richtige Lösung ist die Verwendung von Activity für Dinge im Zusammenhang mit der Benutzeroberfläche, wie getTheme().

Verwandte Themen