Stile im Vergleich zu Modifikatoren

Stile unterscheiden sich von Modifikatoren. Stile ersetzen Modifikatoren nicht, sondern die beiden Systeme existieren mit unterschiedlichen Zielen nebeneinander. Intern ist ein Stil ein Modifikator. Mit Modifikatoren können Sie alles tun, was mit Stilen möglich ist, aber nicht alle Funktionen von Modifikatoren sind in Stilen verfügbar.

Im Folgenden finden Sie einen Vergleich zwischen Stilen und Modifikatoren:

Funktion Modifikatoren Stile
Hauptziel Verhalten, Semantik und komplexe Layouts definieren. Modifikatoren bearbeiten einzelne Elemente für eine bestimmte zusammensetzbare Komponente und werden nicht vom Design übernommen. Visuelles Erscheinungsbild, individuelle Elementgrößen und themenbezogene Eigenschaften definieren. Stile werden auf Designebene ausgeführt und können auf Komponentenebene überschrieben werden. Sie werden übernommen und wenden Stile auf verschiedene zusammensetzbare Komponenten an.
Logik Additiv: Die Modifikatoren werden kombiniert, um ein neues Ergebnis zu erzielen. Überschreibbar: Die letzte in der Stilgruppe festgelegte Eigenschaft wird verwendet. Stile fungieren als eine einzelne Ebene von Eigenschaften, die sich basierend auf einer definierten Prioritätshierarchie überschreiben.
Design Schwierig in ein Design zu übernehmen, werden normalerweise einzeln verwendet. Stile sind standardmäßig themenbezogen (sie können auf CompositionLocals zugreifen), können einmal definiert und in verschiedenen Komponenten verwendet werden.
Leistung Für Aktualisierungen sind oft alle drei Phasen von Compose erforderlich: Komposition, Layout und Zeichnen. Um eine gute Animationsleistung von Modifikatoren zu erzielen, müssen häufig lambdabasierte Versionen geschrieben werden. Die Kompositionsphase wird übersprungen, nur in der Layout- und Zeichenphase aktiv, wodurch weniger Neukompositionen erforderlich sind. Weniger Objektzuweisung erforderlich.
Animationen Erfordert die Verwendung separater Animationsprimitive wie animate*AsState. Enthält die integrierte animate { }-API, die einige Animationen für Sie übernimmt.

Einschränkungen von Modifikatoren

Modifikatoren haben in der aktuellen Compose-Landschaft viele Vorteile. Stile beheben jedoch einige Einschränkungen von Modifikatoren, die in der folgenden Liste beschrieben werden:

  • Modifikatoren werden in der Regel in der Kompositionsphase erstellt. Aktualisierungen können eine vollständige Wiederholung von Komposition, Layout und Zeichnen erzwingen, auch bei kleinen visuellen Änderungen wie der Farbe, es sei denn, Sie erstellen lambdabasierte Modifikatoren.
  • Bedingte Modifikatoren erfordern störende „if-else“-Logik in fließenden Ketten. Für die Animation ist manueller Boilerplate-Code für den Status erforderlich und es gibt keinen leistungsstarken Mechanismus für die automatische Animation.
  • Modifikatoren werden gestapelt, nicht ersetzt. Sie können den Standardrahmen einer Komponente nicht überschreiben, sondern nur einen zweiten Rahmen darüber zeichnen.
  • Modifikatoren lassen sich nur schwer in globale Designs abstrahieren. Daher werden in Designs in der Regel Rohwerte anstelle von wiederverwendbaren Modifikatorkonfigurationen gespeichert.

Einschränkungen von Stilen

Stile können zwar einige der Lücken füllen, die Modifikatoren haben, aber sie haben auch einige Einschränkungen, die zeigen, dass sie Modifikatoren nicht vollständig ersetzen können:

  • Stile sind spezielle Modifikatoren. Ein Modifikator kann alles tun, was ein Stil kann, aber umgekehrt ist das nicht der Fall. Daher können Stile Modifikatoren ergänzen, aber nicht ersetzen.
  • Stile sind auf die visuelle Konfiguration beschränkt (Hintergründe, Abstände, Rahmen). Sie können keine Verhaltensweisen wie Klicklogik, Gestenerkennung oder Semantik für die Barrierefreiheit verarbeiten.
  • Das Auflösen eines Stils in seinen endgültigen Zustand ist teurer als das Anwenden eines einzelnen Modifikators. Das System muss eine Datenstruktur mit allen möglichen Eigenschaftswerten generieren und die Suche nach übernommenen Eigenschaften erschwert dies zusätzlich.

Wann sollten Stile anstelle von Modifikatoren verwendet werden?

Die Entscheidung für Stile hängt weitgehend von Ihrer App und Ihren Anwendungsfällen ab. Die folgende Anleitung hilft Ihnen jedoch dabei, zu entscheiden, wann Sie einen Stil einem Modifikator vorziehen sollten:

  • Um themenweite Konsistenz zu erzielen:Stile sind so konzipiert, dass sie in ein globales Design übernommen werden können. Anstatt sich wiederholende Modifikatoren an jede Komponente zu übergeben, können Sie in Ihrem Design einen einzelnen Stil definieren, um ein einheitliches Erscheinungsbild für die gesamte App zu erstellen.
  • Bei häufigen Animationen:Stile werden in den Phasen „Layout“ und „Zeichnen“ ausgewertet, sodass Eigenschaften wie Farbe oder Skalierung animiert werden können, ohne die Kompositionsphase zu durchlaufen. Dadurch wird der Leistungsaufwand erheblich reduziert. Verwenden Sie einen Stil anstelle eines Modifikators, wenn Sie Animationen für visuelle Eigenschaften erstellen.
  • Überschreiben im Vergleich zum Stapeln:Verwenden Sie Stile, wenn Sie eine Standardeigenschaft ersetzen müssen. Modifikatoren sind additiv (wenn Sie einen Rahmen hinzufügen, wird ein zweiter Rahmen gestapelt), während Stile die Logik „Letzte Änderung gewinnt“ verwenden. So lassen sich Hintergründe oder Abstände einfacher austauschen, ohne dass es zu visuellen Unordnung kommt.
  • Material-Komponenten anpassen:Wenn eine Material-Komponente einen Stilparameter bietet, ist dies der empfohlene Ansatz für die Anpassung. Mit diesen Stilen können Sie auf bestimmte Eigenschaften innerhalb der internen Struktur der zusammensetzbaren Komponente zugreifen und diese ändern, die sonst möglicherweise nicht zugänglich wären.