Stiller, değiştiricilerden tasarımlarıyla ayrılır. Stiller, değiştiricilerin yerini almaz. Bunun yerine, iki sistem farklı hedeflerle birlikte var olur. Dahili olarak, stil bir değiştiricidir. Değiştiricilerle yapabildiğiniz her şeyi Stiller ile de yapabilirsiniz ancak değiştiricilerdeki tüm işlevler Stiller'de 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ı, semantiği ve karmaşık düzenleri tanımlayın. Değiştiriciler, belirli bir composable için bağımsız öğ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. |
| Mantık (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şebilirler), tek bir kez tanımlanabilir ve bileşenler arasında 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 oluşturma sayısını azaltır. Daha az nesne ayırma işlemi 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 canlandırma" 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 değiştiricilerin yerini tamamen alamayacaklarını gösteren bazı sınırlamaları da vardır:
- Stiller, özel değiştiricilerdir. Değiştiriciler, bir stilin yapabileceği her şeyi yapabilir ancak bunun tersi geçerli değildir. Dolayısıyla, stiller değiştiricileri tamamlayabilir ancak bunların yerine kullanılamaz.
- 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.
Değiştiriciler yerine stiller ne zaman kullanılır?
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 ne zaman stil kullanmanız gerektiğini belirlemenize yardımcı olur:
- Tema genelinde tutarlılık sağlamak için: Stiller, genel bir temaya "aktarılacak" ş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 animasyonlar 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, 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ığılır), stiller ise "son yazma kazanır" mantığını kullanır. Bu sayede, görsel karmaşa olmadan arka planları veya dolguları değiştirmek kolaylaşı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, aksi takdirde erişilemeyebilecek composable'ın iç yapısındaki belirli özelliklere erişmenize ve bunları değiştirmenize olanak tanır.