Definiertes XML-Layout im Layout-Land erscheint nicht in Android-Anwendung

8

Ich entwickle eine Anwendung nach diesem Beispiel . Ich habe ein Landschaftslayout für header.xml in einem Layout-Land-Ordner definiert, aber wenn ich die Ausrichtung in Querformat ändere, wird das definierte Layout nicht auf dem Bildschirm angezeigt.

Wissen Sie warum?

Danke

Aktualisiert:

Aktivitätscode:

%Vor%

XMl Layout im Querformat:

%Vor%     
Babak Fakhriloo 05.06.2012, 19:15
quelle

2 Antworten

19

Mit Android können Sie verschiedene Versionen von Ressourcendateien bereitstellen, um bestimmte Gerätekonfigurationen zu unterstützen, einschließlich Bildschirmgröße / Auflösung und (wie Sie es versuchen) Geräteausrichtung. Wenn Android eine Layout-Datei lädt, sieht es zuerst im Ordner res/layout-port (im Hochformat) oder im Ordner res/layout-land (im Querformat) aus. Wenn die Datei nicht gefunden wird, wird sie im normalen res/layout -Ordner angezeigt.

Darüber hinaus hier , wenn sich bestimmte Gerätekonfigurationen ändern (z. B. Geräteausrichtung) ) Während der Laufzeit startet Android den aktuellen Prozess neu, indem er den Status speichert, ihn zerstört und dann mit den gespeicherten Statusinformationen startet. Dies ermöglicht es, die Layout-Dateien erneut zu laden, und es wird den Ordner für die neue Ausrichtung suchen, wenn es versucht, sie zu laden.

Wenn Sie also Ihre Anwendung im Hochformat starten, wird die Datei in res/layout-port oder res/layout geladen. Wenn Sie das Gerät dann in die Landschaft drehen, wird Ihr Prozess zerstört und neu gestartet. Diesmal wird es jedoch im Querformat angezeigt, so dass stattdessen res/layout-land für die Layoutdateien überprüft wird.

Wenn Sie Ihre Dateien auf diese Weise eingerichtet haben, aber nicht so funktionieren, wie Sie es für richtig halten, vergewissere ich mich zuerst, dass sie nicht die richtigen Dateien verwendet, indem Sie zwei header.xml -Dateien in layout-land einfügen. und layout-port Ordner, vielleicht einen mit einem roten Hintergrund und einen mit einem grünen Hintergrund. Stellen Sie sicher, dass Sie die Dateireferenzen überprüfen, und verwenden Sie möglicherweise Toast, um einige Debugging-Informationen auf dem Bildschirm zu veröffentlichen, um sicherzustellen, dass die Layouts korrekt aufgefüllt werden.

Das Standardverhalten ist, dass Android die Orientierungsänderung (die Zerstörung Ihrer Aktivität und das Erstellen einer neuen Instanz, die alle Layoutdateien neu lädt) beinhaltet. Dieses Standardverhalten tritt immer auf, es sei denn, Ihr Aktivitäts-Tag in Ihrer Manifest-Datei enthält die Eigenschaft android: configChanges="orientation". (Dieses Tag kann andere Argumente als die Orientierung verwenden - Android wird die Konfigurationsänderungen für alle Ereignisse außer denen übernehmen, die Sie als Argumente für dieses Tag übergeben.)

Wenn Sie das android:configChanges="orientation" -Tag einschließen, sagen Sie, dass Android Ihre Aktivitäten NICHT zerstört und NICHT die Layout-Dateien neu lädt, wenn sich die Ausrichtung des Geräts ändert. Anstelle des Standardverhaltens ruft es eine Methode auf (die Sie definieren), damit Sie alle Änderungen, die Sie vornehmen möchten, um die Orientierungsänderung selbst vornehmen zu können, anstatt es automatisch von android behandeln zu lassen. Es ist so gedacht, dass, wenn die Zerstörung Ihrer Aktivität eine große Unannehmlichkeit wäre, sie nicht automatisch zerstört werden muss.

BEARBEITEN: einige Dinge aus der Kommentardiskussion hinzugefügt

    
matt5784 05.06.2012, 19:41
quelle
5

Sie sollten% android:configChanges="orientation" in der Datei manifest für diese Aktivität definieren und die Methode onConfigChanged() in setContentView()

überschreiben

Wie so:

%Vor%     
Vivek Kumar 25.09.2012 14:53
quelle

Tags und Links