Stiller ve değiştiriciler

Stiller, değiştiricilerden tasarımlarına göre farklılık gösterir. Stiller, değiştiricilerin yerini almaz. Bunun yerine, iki sistem farklı amaçlarla birlikte kullanılır. Dahili olarak, stil bir değiştiricidir. Değiştiricilerle stillerin yapabildiği her şeyi yapabilirsiniz ancak değiştiricilerdeki tüm işlevler stillerde kullanılamaz.

Stiller ve değiştiriciler arasındaki karşılaştırmayı aşağıda görebilirsiniz:

Özellik Değiştiriciler Stiller
Birincil Hedef Davranışları, anlamsal yapıları ve karmaşık düzenleri tanımlayın. Değiştiriciler, belirli bir composable için öğeleri anında değiştirir ve temadan aşağıya doğru yayılmaz. Görsel görünümü, tek tek öğelerin boyutunu ve temalandırılabilir özellikleri tanımlayın. Stiller tema düzeyinde çalışır ve bileşen düzeyinde üzerine yazılabilir. Bunlar, farklı composable'lara uygulanarak stil oluşturur.
Logic Toplama: Değiştiriciler bir araya gelerek yeni bir sonuç oluşturur. Üzerine yazılabilir: Stilde ayarlanan son özellik kazanır. Stiller, tanımlanmış bir öncelik hiyerarşisine göre birbirini geçersiz kılan tek bir özellik katmanı olarak işlev görür.
Tema Bir temaya dönüştürmek zordur, normalde ayrı ayrı kullanılır. Stiller, tasarımları gereği temalandırılabilir (CompositionLocal'lara erişebilir) ve bir kez tanımlanıp bileşenler genelinde kullanılabilir.
Performans Güncellemeler genellikle Compose'un üç aşamasını da gerektirir: oluşturma, düzen ve çizim. Değiştiricilerin iyi animasyon performansı elde etmesi için genellikle lambda tabanlı sürümlerin yazılması gerekir. Bileşen oluşturma aşamasını atlar, yalnızca düzen ve çizim aşamasında etkindir ve yeniden bileşen oluşturma sayısını azaltır. Daha az nesne ayırma gerektirir.
Animasyonlar animate*AsState gibi ayrı animasyon öğelerinin kullanılmasını gerektirir. Bazı animasyonları sizin için işleyen yerleşik animate { } API'si içerir.

Değiştiricilerin sınırlamaları

Değiştiriciler, mevcut Compose ortamında birçok avantaj sunar. Ancak Stiller, değiştiricilerin bazı sınırlamalarını ele alır. Bu sınırlamalar aşağıdaki listede açıklanmıştır:

  • Değiştiriciler genellikle Kompozisyon aşamasında oluşturulur. Lambda tabanlı değiştiriciler oluşturmadığınız sürece güncellemeler, renk gibi küçük görsel değişiklikler için bile Composition, Layout ve Draw'un tamamen yeniden çalıştırılmasına neden olabilir.
  • Koşullu değiştiriciler, akıcı zincirlerde kesintiye neden olan if-else mantığı gerektirir. Bunları canlandırmak için manuel durum şablonu gerekir ve yüksek performanslı bir "otomatik animasyon" mekanizması yoktur.
  • Değiştiriciler, değiştirilmek yerine üst üste eklenir. Bir bileşenin varsayılan kenarlığını geçersiz kılamazsınız. Yalnızca üstüne ikinci bir kenarlık çizebilirsiniz.
  • Değiştiricilerin genel temalara dönüştürülmesi zordur. Bu nedenle temalar, yeniden kullanılabilir değiştirici yapılandırmaları yerine genellikle ham değerleri depolar.

Stillerin sınırlamaları

Stiller, değiştiricilerin bazı eksiklerini giderebilse de bazı sınırlamaları vardır. Bu sınırlamalar, stillerin değiştiricilerin yerini tamamen alamayacağını gösterir:

  • Stiller, özel değiştiricilerdir. Değiştiriciler, Stillerin yapabileceği her şeyi yapabilir ancak bunun tersi geçerli değildir. Bu nedenle, stiller değiştiricileri tamamlayabilir ancak değiştiremez.
  • Stiller, görsel yapılandırmayla (arka planlar, dolgu, kenarlıklar) sınırlıdır. Tıklama mantığı, hareket algılama veya erişilebilirlik semantiği gibi davranışları işleyemezler.
  • Bir stili son durumuna getirmek, tek bir değiştirici uygulamaktan daha maliyetlidir. Sistem, olası tüm özellik değerlerini içeren bir veri yapısı oluşturmalıdır. Devralınan özelliklerin aranması bu durumu daha da karmaşık hale getirir.

Stilleri değiştiricilere tercih etme

Stilleri kullanma tercihi büyük ölçüde uygulamanıza ve kullanım alanlarınıza bağlı olsa da, aşağıdaki bilgiler, bir değiştirici yerine stili ne zaman tercih etmeniz gerektiğini belirlemenize yardımcı olur:

  • Tema genelinde tutarlılık sağlamak için: Stiller, küresel bir temaya "taşınacak" şekilde tasarlanır. Her bileşene tekrar eden değiştiriciler iletmek yerine, temanızda tek bir stil tanımlayarak uygulamanın tamamında birleşik bir görünüm oluşturabilirsiniz.
  • Sık animasyon yaparken: Stiller, Layout (Düzen) ve Draw (Çizim) aşamalarında değerlendirilir. Böylece renk veya ölçek gibi özellikler, Composition (Bileşim) aşaması tamamen atlanarak animasyonlu hale getirilebilir. Bu durum, performans ek yükünü önemli ölçüde azaltır. Görsel özellik animasyonları yaparken değiştirici yerine stil kullanın.
  • Geçersiz kılma ve yığınlama: Varsayılan bir özelliği değiştirmeniz gerektiğinde stilleri kullanın. Değiştiriciler eklenir (kenarlık eklemek ikinci bir kenarlığı yığar). Stiller ise "son yazma kazanır" mantığını kullandığından görsel karmaşa olmadan arka planları veya dolguyu değiştirmek daha kolaydır.
  • Materyal bileşenlerini özelleştirme: Bir Materyal bileşeni Style parametresi sağlıyorsa özelleştirme için önerilen yaklaşım budur. Bu stiller, composable'ın iç yapısında normalde erişilemeyebilecek belirli özelliklere erişmenize ve bunları değiştirmenize olanak tanır.