Style a modyfikatory

Style różnią się od modyfikatorów. Style nie zastępują modyfikatorów. Oba systemy współistnieją i mają różne cele. Wewnętrznie styl jest modyfikatorem. Za pomocą modyfikatorów możesz robić wszystko, co jest możliwe w przypadku stylów, ale nie wszystkie funkcje modyfikatorów są dostępne w stylach.

Poniżej znajdziesz porównanie stylów i modyfikatorów:

Funkcja Modyfikatory Style
Cel główny Określ zachowania, semantykę i złożone układy. Modyfikatory manipulują poszczególnymi elementami na bieżąco w przypadku konkretnego komponentu i nie są dziedziczone z motywu. Określ wygląd, rozmiar poszczególnych produktów i właściwości, które można dostosować. Style działają na poziomie motywu i można je zastąpić na poziomie komponentu. Są one przekazywane w dół i stosowane w różnych komponentach.
Logika Dodawanie – modyfikatory łączą się, tworząc nowy wynik. Można ją zastąpić – wygrywa ostatnia właściwość ustawiona w stylu. Style działają jak pojedyncza warstwa właściwości, które zastępują się nawzajem na podstawie określonej hierarchii pierwszeństwa.
Motywy Trudno włączyć do motywu, zwykle używane pojedynczo. Style są z założenia tematyzowane (mają dostęp do CompositionLocal) i można je zdefiniować raz, a potem używać w różnych komponentach.
Wydajność Aktualizacje często wymagają wszystkich 3 faz Compose: kompozycji, układu i rysowania. Aby uzyskać dobrą wydajność animacji modyfikatorów, często trzeba napisać wersje oparte na wyrażeniach lambda. Pomija fazę kompozycji, jest aktywny tylko w fazie układu i rysowania, co zmniejsza liczbę ponownych kompozycji. Wymaga mniejszej alokacji obiektów.
Animacje Wymaga użycia osobnych elementów pierwotnych animacji, takich jak animate*AsState Funkcje wbudowanego interfejsu API animate { }, który obsługuje niektóre animacje.

Ograniczenia modyfikatorów

Modyfikatory mają wiele zalet w obecnym środowisku Compose. Style rozwiązują jednak niektóre ograniczenia modyfikatorów, które opisujemy na poniższej liście:

  • Modyfikatory są zwykle tworzone w fazie kompozycji. Aktualizacje mogą wymuszać pełne ponowne uruchomienie funkcji Composition, Layout i Draw, nawet w przypadku niewielkich zmian wizualnych, takich jak kolor, chyba że utworzysz modyfikatory oparte na lambdach.
  • Modyfikatory warunkowe wymagają w łańcuchach płynnych logiki warunkowej if-else. Animowanie ich wymaga ręcznego tworzenia kodu stanu i nie ma mechanizmu „automatycznej animacji” o wysokiej wydajności.
  • Modyfikatory kumulują się, zamiast się zastępować. Nie możesz zastąpić domyślnej ramki komponentu. Możesz tylko narysować drugą na wierzchu.
  • Modyfikatory trudno jest przekształcić w motywy globalne. Dlatego motywy zwykle przechowują wartości pierwotne zamiast konfiguracji modyfikatorów wielokrotnego użytku.

Ograniczenia stylów

Style mogą wypełniać niektóre luki, które mają modyfikatory, ale mają też pewne ograniczenia, które pokazują, że nie mogą całkowicie zastąpić modyfikatorów:

  • Style to specjalistyczne modyfikatory. Modyfikator może wykonywać wszystkie czynności, które wykonuje styl, ale nie na odwrót. W związku z tym style mogą uzupełniać modyfikatory, ale nie mogą ich zastępować.
  • Style są ograniczone do konfiguracji wizualnej (tła, dopełnienia, obramowania). Nie obsługują one zachowań takich jak logika kliknięć, wykrywanie gestów czy semantyka ułatwień dostępu.
  • Przekształcenie stylu w stan końcowy jest droższe niż zastosowanie pojedynczego modyfikatora. System musi wygenerować strukturę danych zawierającą wszystkie możliwe wartości właściwości, a wyszukiwanie właściwości dziedziczonych dodatkowo to komplikuje.

Kiedy używać stylów zamiast modyfikatorów

Decyzja o użyciu stylów zależy w dużej mierze od aplikacji i przypadków użycia. Poniższe wskazówki pomogą Ci określić, kiedy lepiej użyć stylu niż modyfikatora:

  • Aby zachować spójność w całym motywie: style są zaprojektowane tak, aby można je było „przenieść” do motywu globalnego. Zamiast przekazywać powtarzające się modyfikatory do każdego komponentu, możesz zdefiniować jeden styl w motywie, aby uzyskać jednolity wygląd całej aplikacji.
  • Podczas wykonywania częstych animacji: style są oceniane w fazach układu i rysowania, co umożliwia animowanie właściwości takich jak kolor czy skala z pominięciem fazy kompozycji. Znacznie zmniejsza to obciążenie związane z wydajnością. Podczas animowania właściwości wizualnych używaj stylu zamiast modyfikatora.
  • Zastępowanie a nakładanie: używaj stylów, gdy chcesz zastąpić domyślną właściwość. Modyfikatory są addytywne (dodanie obramowania powoduje nałożenie drugiego), natomiast style korzystają z logiki „ostatni zapis wygrywa”, co ułatwia zamianę tła lub dopełnienia bez wizualnego bałaganu.
  • Dostosowywanie komponentów Material: jeśli komponent Material udostępnia parametr Style, jest to zalecane podejście do dostosowywania. Te style umożliwiają dostęp do określonych właściwości w strukturze wewnętrznej komponentu kompozycyjnego, które w inny sposób mogłyby być niedostępne, i ich modyfikowanie.