Ich habe versucht, die Ursache für seltsame Formatierungsstil-Inkonsistenzen für mein Views
in meiner gesamten Anwendung zu finden, und ich glaube, ich habe es mit diesem Beispiel eingegrenzt.
Ich habe zwei gleichwertige Layouts für verschiedene Views
s mit genau der gleichen Prozedur und nur für die Variation der Context
erstellt. In der ersten Menge wird jede View
mit dem Kontext der Anwendung durch Activity.getApplicationContext()
erstellt, während in der zweiten Menge die View
s den Kontext der Aktivität durch this
füttern.
Das Ergebnis ist sehr unterschiedlich:
Irgendwelche Vorschläge darüber, warum der Anwendungskontext verwendet wird, hat zur Folge, dass die im Screenshot gezeigten unbrauchbaren (und inkonsistenten - Farben weiß und grau) Formatierungen auftreten?
Aktivitätscode:
%Vor%Manifest:
%Vor% In Android-Quellen gibt getApplicationContext()
das Anwendungsobjekt zurück, das ContextWrapper
erweitert. Mit getApplicationContext()
übergeben Sie also ContextWrapper
subclass. Übergeben Sie jedoch this
, übergeben Sie ein Activity
-Objekt, das% erweitert. co_de%, also gibst du ContextThemeWrapper
subclass weiter. Jetzt besteht der Unterschied zwischen ContextThemeWrapper
und ContextWrapper
darin, dass ContextThemeWrapper
alle Anrufe an einen anderen delegiert Context und ContextWrapper
ermöglicht es Ihnen, das Thema von dem zu ändern, was sich im umschlossenen Kontext befindet .
Obwohl die Frage war, warum genau das passiert (im Gegensatz zu der Ursache, die klar war), hier sind auch einige hilfreiche Beiträge, die die Gefahren erklären, den Anwendungskontext falsch zu benutzen und wie man einen Kontext richtig auswählt:
Am wichtigsten von @CommonsWare: "getApplicationContext () ist kein vollständiger Kontext und unterstützt daher nicht alles, was diese Aktivität tut."
Awesome Post über Context, der alles klären sollte:
Tags und Links java android android-context android-theme android-styles