Android Holo Light Styling ändert sich je nach gewähltem Kontext

8

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%     
B T 12.02.2013, 02:05
quelle

1 Antwort

12

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:

Michał Z. 12.02.2013, 07:51
quelle