Stile im Vergleich zu Modifikatoren

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

Im Folgenden finden Sie einen Vergleich zwischen Stilen und Modifikatoren:

Funktion Modifikatoren Stile
Hauptziel Verhalten, Semantik und komplexe Layouts definieren Mit Modifikatoren werden einzelne Elemente für eine bestimmte zusammensetzbare Funktion im Handumdrehen bearbeitet. Sie werden nicht vom Design abgeleitet. Definieren Sie das visuelle Erscheinungsbild, die Größe einzelner Elemente und die Eigenschaften, die sich an das Design anpassen lassen. Stile werden auf Themenebene angewendet und können auf Komponentenebene überschrieben werden. Sie werden weitergegeben und auf verschiedene Composables angewendet.
Logik Additiv: Die Modifikatoren werden kombiniert, um ein neues Ergebnis zu bilden. Überschreibbar: Die letzte im Stil festgelegte Eigenschaft hat Vorrang. Stile fungieren als einzelne Ebene von Eigenschaften, die sich basierend auf einer definierten Vorranghierarchie gegenseitig überschreiben.
Theming Schwer in ein Thema einzuordnen, wird normalerweise einzeln verwendet. Styles sind standardmäßig themenfähig (sie können auf CompositionLocal zugreifen) und können einmal definiert und für mehrere Komponenten verwendet werden.
Leistung Updates erfordern oft alle drei Phasen von Compose: Komposition, Layout und Zeichnen. Um eine gute Animationsleistung von Modifikatoren zu erzielen, ist es oft erforderlich, Lambda-basierte Versionen zu schreiben. Überspringt die Kompositionsphase, ist nur in der Layout- und Zeichenphase aktiv und reduziert die Neukompositionen. Weniger Objektzuweisung erforderlich
Animationen Erfordert die Verwendung separater Animationsprimitive wie animate*AsState Funktionen, die in die animate { } API integriert sind und einige Animationen für Sie übernehmen.

Einschränkungen von Modifikatoren

Modifier bieten in der aktuellen Compose-Landschaft viele Vorteile. Mit „Styles“ werden jedoch einige Einschränkungen von Modifizierern behoben, die in der folgenden Liste beschrieben werden:

  • Modifikatoren werden in der Regel in der Kompositionsphase erstellt. Durch Updates kann ein vollständiger erneuter Durchlauf von „Composition“, „Layout“ und „Draw“ erzwungen werden, selbst bei kleinen visuellen Änderungen wie der Farbe, es sei denn, Sie erstellen lambdabasierten Modifikatoren.
  • Für bedingte Modifizierer ist eine störende If-Else-Logik in fließenden Ketten erforderlich. Für die Animation ist manueller Boilerplate-Code für den Status erforderlich und es fehlt ein leistungsstarker „Auto-Animate“-Mechanismus.
  • Modifikatoren werden gestapelt und 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 Themen abstrahieren. Daher werden in Designs in der Regel Rohwerte anstelle von wiederverwendbaren Modifikatorkonfigurationen gespeichert.

Einschränkungen von Stilen

Mit Stilen lassen sich einige der Lücken schließen, die durch Modifikatoren entstehen. Sie haben jedoch auch einige Einschränkungen, die zeigen, dass sie Modifikatoren nicht vollständig ersetzen können:

  • Stile sind spezielle Modifikatoren. Ein Modifikator kann alles, was ein Stil kann, aber umgekehrt gilt das nicht. Daher können Stile Modifikatoren ergänzen, aber nicht ersetzen.
  • Stile sind auf die visuelle Konfiguration beschränkt (Hintergründe, Innenabstand, Rahmen). Sie können keine Verhaltensweisen wie Klicklogik, Erkennung von Gesten oder Semantik für 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 Property-Werten generieren. Die Suche nach übernommenen Properties erschwert dies zusätzlich.

Wann sollten Stile anstelle von Modifizierern verwendet werden?

Die Entscheidung, ob Sie Stile verwenden, hängt weitgehend von Ihrer App und Ihren Anwendungsfällen ab. Die folgenden Richtlinien helfen Ihnen jedoch dabei, zu entscheiden, wann Sie einen Stil einem Modifikator vorziehen sollten:

  • Designweite Konsistenz erreichen:Stile sind so konzipiert, dass sie in ein globales Design „übernommen“ werden können. Anstatt sich wiederholende Modifiers an jede Komponente zu übergeben, können Sie in Ihrem Theme einen einzelnen Style definieren, um ein einheitliches Erscheinungsbild für die gesamte App zu schaffen.
  • Bei häufigen Animationen:Die Stile werden während der Layout- und Zeichenphasen ausgewertet. So können Eigenschaften wie Farbe oder Skalierung animiert werden, ohne dass die Kompositionsphase durchlaufen werden muss. Dadurch wird der Leistungsaufwand erheblich reduziert. Verwenden Sie für Animationen von visuellen Eigenschaften einen Stil anstelle eines Modifikators.
  • Ü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 für Stile die Logik „last-write-wins“ verwendet wird. So lassen sich Hintergründe oder Abstände leichter austauschen, ohne dass es zu visuellen Unordnung kommt.
  • Material-Komponenten anpassen:Wenn eine Material-Komponente einen Style-Parameter bietet, ist das die empfohlene Methode zum Anpassen. Mit diesen Stilen können Sie auf bestimmte Eigenschaften in der internen Struktur der Composable zugreifen und sie ändern, die sonst möglicherweise nicht zugänglich wären.