Mit der neuen Designbibliothek gibt es mehrere neue Layouts, die das Verhalten der Symbolleiste stark verändern, wenn der Entwickler dies wünscht. Da verschiedene Fragmente unterschiedliche Verhaltensweisen und Ziele haben, z. B. ein Galeriefragment mit einer reduzierten Symbolleiste, die ein wichtiges Foto anzeigt, oder ein Fragment ohne Bildlaufansicht, für das das Appbarlayout zum Ausblenden der Symbolleiste nicht erforderlich ist, kann eine einzige Symbolleiste in der Aktivität vorhanden sein sich als schwierig erweisen.
Sollte ich damit die Symbolleiste auf jedes Fragment verschieben? In diesem Fall muss ich die supportActionBar jedes Mal festlegen, wenn ich ein Fragment zeige, und außerdem eine Referenz der Aktivität in dem Fragment haben, die die Unabhängigkeit von Fragmenten aufhebt. Wenn ich die Symbolleiste in der Aktivität in Ruhe lasse, müssen für jeden Verhaltenstyp in jedem Fragment mehrere Layouts definiert sein. Was wäre der beste Ansatz?
quelle
Antworten:
Für mich klingt es zu seltsam, in jedem Fragment eine App- und Symbolleiste zu haben. Daher habe ich mich für eine einzelne App-Leiste mit Symbolleiste in Aktivität entschieden.
Um dieses Problem mit CoordinatorLayout zu lösen, müssen Sie ein anderes Verhalten Ihres
FrameLayout
(oder eines anderen Layouts) festlegen , das Fragmente von jedem Fragment enthalten soll, das Sie als Standardverhalten überschreiben möchten.Nehmen wir an, dass Ihr Standardverhalten ist
app:layout_behavior="@string/appbar_scrolling_view_behavior"
Dann haben Sie in Ihrer fragment_activity_layout.xml möglicherweise Folgendes:
Und Sie in jedem Fragment möchte nicht implementieren
app:layout_behavior="@string/appbar_scrolling_view_behavior"
können , müssen Sie außer Kraft setzenonAttach
undonDetach
Methoden , die das Verhalten Ihres ändern wirdFrameLayout
:Danach wird CoordinatorLayout die App-Leiste usw. nicht mehr reduzieren und Fragment-Layouts in voller Höhe zulassen.
quelle
onLoadFinished
möglich ist Ich möchte ein zentriertes Bild anzeigen, das darauf hinweist, dass hier nichts ist (genau wie in der Posteingangs-App), aber das habe ich noch nicht versucht. Vielleicht später heute.enableCoordinator(Activity activity)
/disableCoordinator(Activity activity)
von Fragmenten an.Hier ist meine Lösung
quelle
Dies ist eine wirklich gute Frage: Sollten
Toolbar
s, die sich wie ein handelnActionBar
müssen, in einemActivity
oder einem aufbewahrt werden ?Fragment
? Nachdem ich verschiedene Fragen und Dokumentationen durchsucht hatte, konnte ich keine Lösung finden, die alle Fälle abdeckt. Es hängt also wirklich von Ihrer Situation ab, welchen Weg Sie gehen müssen.Fall 1: Die Symbolleiste muss durch ActionBar ersetzt werden
Wenn sich die Symbolleiste wie eine normale Aktionsleiste verhalten muss (oder wenn von Zeit zu Zeit maximal 1 Fragment angezeigt wird), ist es meiner Meinung nach am besten / einfachsten, die traditionelle Symbolleiste
Activities
mit der eigenen Symbolleiste zu verwenden und Ihr Fragment dort abzulegen. Auf diese Weise müssen Sie sich keine Gedanken darüber machen, wann welche Symbolleiste angezeigt werden muss.Das Ändern der ActionBar (-Verhalten) von Fragmenten ist ebenfalls möglich, aber ich würde es nicht empfehlen, da Sie dadurch gezwungen sind, zu verfolgen, welches Fragment die ActionBar wann geändert hat. Ich weiß nicht einmal, ob das Einstellen der ActionBar mehrmals durchgeführt werden kann.
Fall 2: Jedes Fragment sollte eine eigene (Teil der) Symbolleiste haben
Sie können auch verschiedene eigenständige Symbolleisten mit unterschiedlichen Aktionen in verschiedene Fragmente einfügen. Auf diese Weise können Sie verschiedene Fragmente nebeneinander anzeigen - jedes mit seinen eigenen Aktionen in der Symbolleiste - und vorschlagen, dass es sich um eine Symbolleiste handelt (möglicherweise wie die Google Mail-App, obwohl ich mir nicht sicher bin). Dies bedeutet jedoch, dass Sie diese Symbolleisten selbst aufblasen müssten, dies muss jedoch nicht sehr schwierig sein.
Ich hoffe, dies hilft bei der Auswahl.
(Entschuldigung, wenn ich (Sprach-) Fehler gemacht habe)
quelle