Bearbeitet, um weitere Details hinzuzufügen: (ursprünglich vor fast zwei Monaten gefragt ... haben immer noch keine Lösung gefunden)
Ich habe eine Aktivität mit einer etwas komplizierten Sichtweise. Technisch gesehen nicht kompliziert ... da ist gerade viel los. Alle Aktivitäten in dieser bestimmten App sind auf FullScreen NoTitleBar eingestellt und alle sind auf Querformat ausgerichtet. Ich merke schon früh in der Entwicklung, wenn die App ausgeblendet ist und dann wieder geht, gab es eine seltene Tendenz, dass das Layout vertikal nach unten rutscht, als ob es Platz für die Titelleiste und die Statusleiste schaffen würde.
Später in der Entwicklung ruft die App jetzt zu verschiedenen externen Absichten auf. Ich merke jetzt, dass es mehr eine Tendenz gibt, diese gleiche Verschiebung zu machen, wenn ich von einer extern gehandhabten abgefeuerten Absicht fortfahre (wie das Erstellen einer "Auswahl" Absicht oder die Auswahl eines Bildes). Ich kann es mit genau den gleichen Schritten inkonsistent reproduzieren ... manchmal passiert es manchmal nicht. Es scheint, als gäbe es zwischen verschiedenen Phasen des Messens und Auslegens eine Wettlaufsituation. Ich gehe davon aus, dass einer dieser Schritte, die das System für mich ausführt, ist, nach Vollbild und Nichtlibelle zu suchen und die notwendige Verschiebung vorzunehmen. Dies passiert wahrscheinlich in einigen Fällen zu spät.
Ich habe eine Reihe von Logging, und Aufrufe von invalidate (), requestLayout (), etc. versucht, vielleicht die Race-Bedingung zu fangen, aber das Problem scheint außerhalb meiner Layouts. Die oberen () und unteren () Werte meines Root-Layouts sind immer 0 und die Höhe meines Bildschirms, selbst wenn ich dies protokolliere, während das Problem auftritt.
Gibt es eine andere Methode des WindowManager oder eines anderen Objekts, das mit der Systemansicht zusammenhängt, kann ich eine vollständige Neuberechnung erzwingen, neu zeichnen, erneut nach aktuellen Design- / Stil-Flags suchen?
Ich hatte genau das gleiche Problem und probierte auch mehrere aproches (wie die oben genannten). Keine von ihnen hat funktioniert. Allerdings habe ich die folgende Problemumgehung gefunden:
%Vor%Die Ansicht wird bei diesem Vorgang ein kurzes Flackern machen, aber zumindest bleibt sie nicht im Kreis. Eine saubere Lösung muss noch gefunden werden. Allerdings unterstützt dies Ihre These, dass es ein Timing- oder Rassenproblem gibt.
In meinem Fall wurde dieses Verhalten durch die Rückkehr vom Sperrbildschirm ausgelöst. Keine Ahnung warum aber nach dem Hinzufügen der leeren überladenen Funktion wurde es behoben (aber ich habe es nur auf meinem HTC Wilfire getestet). Es könnte ein anderer Bug sein.
%Vor%Ich bin mir nicht sicher, ob es funktioniert, aber Sie können dies mit dieser Methode versuchen:
%Vor%Wenn das nicht automatisch funktioniert, fügen Sie der Methode onDraw (Canvas) die Anweisungen hinzu, die zum Entfernen der Titelleiste erforderlich sind, und führen Sie ähnliche Anpassungen durch, die Ihre Aktivität möglicherweise beim Start durchführt.
Ich hoffe, das hilft.
Haben Sie FullScreen NoTitleBar in Ihrem Manifest oder Code festgelegt? Wenn Sie Code verwenden, kann es sein, dass es gerendert wird, bevor Ihr Code einsetzt?
%Vor%Ich verstehe, dass Sie Themen für einzelne Aktivitäten in einer Anwendung festlegen können. Machst du? und stehen sie in Konflikt mit Ihren Anwendungseinstellungen?
Ich habe es behoben, indem ich das Thema für die Anwendung und nicht für einzelne Aktivitäten festgelegt habe.
%Vor%Das hat für mich funktioniert. Dieses Problem tritt auf, wenn die nächste Aktivität, die wir starten, keine Vollbildaktivität und die aktuelle Aktivität eine Vollbildaktivität ist.