Bu sayfada, önemli bir katmanı oluşturan mimari katmanlara ve bu tasarımı şekillendiren temel ilkelere odaklanacağız.
Jetpack Compose tek bir monolitik proje değil; bir sayıdan oluşturuldu tam bir yığın oluşturmak üzere bir araya getirilen modüllerin sayısı. Anlama Jetpack Compose'u oluşturan farklı modüller aşağıdakileri yapmanıza olanak tanır:
- Uygulama veya kitaplığınızı oluşturmak için uygun soyutlama düzeyini kullanın
- Daha fazla kontrole sahip olmak ya da daha fazla kontrol sahibi olmak için özelleştirme
- Bağımlılıklarınızı en aza indirin
Katmanlar
Jetpack Compose'un ana katmanları şunlardır:
Şekil 1. Jetpack Compose'un ana katmanları.
Her bir katman daha alt seviyelerde yer alır ve yüksek seviyelerde özelliklere üst düzey bileşenlerden oluşur. Her katman, alt katmanların herkese açık API'lerini temel alır kontrol etmenizi ve ters gidebilecek herhangi bir katmanı değiştirebilmenizi gerekir. Bu katmanları aşağıdan yukarıya doğru inceleyelim.
- Çalışma zamanı
- Bu modülde, Compose çalışma zamanıyla ilgili temel bilgileri bulabilirsiniz. Örneğin:
remember
,mutableStateOf
, "the"@Composable
ek açıklama veSideEffect
. Yalnızca ihtiyacınız varsa doğrudan bu katmanın üzerine Compose'un kullanıcı arayüzü değil, ağaç yönetimi yetenekleri. - Kullanıcı arayüzü
- Kullanıcı arayüzü katmanı birden fazla modülden (
ui-text
,ui-graphics
,ui-tooling
vb.) bakın. Bu modüller, aşağıdakiler gibi kullanıcı arayüzü araç setinin temel özelliklerini uygular:LayoutNode
,Modifier
, giriş işleyiciler, özel düzenler ve çizim. Aşağıdaki durumlarda bu katmanda geliştirmeyi yalnızca kullanıcı arayüzü araç setiyle ilgili temel kavramlara ihtiyacınız var. - Temel
- Bu modülde, Compose kullanıcı arayüzü için tasarım sisteminden bağımsız yapı taşları
beğeni
Row
veColumn
,LazyColumn
ve bunlara benzer başka hareketlerin algılanması gibi kendi tasarım sisteminizi oluşturmanıza yardımcı olacak. - Malzeme
- Bu modülde, Materyal Tasarım sisteminin Tema sistemi, stil özellikleri ayarlanmış bileşenler, dalgacık sağlayarak kullanıcı arayüzü oluşturma göstergeler, simgeler. Projenizde Materyal Tasarım kullanırken bu katmanı temel alın.
Tasarım ilkeleri
Jetpack Compose için yol gösterici ilke, küçük ve odaklanmış, birkaç işlevin yerine bir araya getirilebilen (veya bir araya getirilebilen) monolitik bileşenler. Bu yaklaşımın birçok avantajı vardır.
Kontrol
Üst seviye bileşenler genellikle sizin için daha fazla katkı sağlar ancak doğrudan sahip olduğunuz kontrolü ifade eder. Daha fazla kontrole ihtiyacınız varsa kullanmak için alt düzey bileşen.
Örneğin, bir bileşenin rengini canlandırmak isterseniz
animateColorAsState
API:
val color = animateColorAsState(if (condition) Color.Green else Color.Red)
Bununla birlikte, bileşenin her zaman gri renkli başlaması gerekiyorsa
bu API ile nasıl yapılacağını göstereceğim. Bunun yerine, açılır menüden daha alt seviyeyi kullanabilirsiniz.
Animatable
API:
val color = remember { Animatable(Color.Gray) } LaunchedEffect(condition) { color.animateTo(if (condition) Color.Green else Color.Red) }
Daha üst düzey animateColorAsState
API, alt seviyenin üzerine kurulmuştur
Animatable
API'sı. Alt düzey API kullanmak daha karmaşıktır ancak daha fazlasını sunar.
ve kontrol etmesi gerekir. İhtiyaçlarınıza en uygun soyutlama düzeyini seçin.
Özelleştirme
Daha küçük yapı taşlarından üst seviye bileşenleri bir araya getirmek,
bileşenleri özelleştirebilirsiniz. Örneğin,
uygulama
/
Button
Malzeme katmanı tarafından sağlanır:
@Composable fun Button( // … content: @Composable RowScope.() -> Unit ) { Surface(/* … */) { CompositionLocalProvider(/* … */) { // set LocalContentAlpha ProvideTextStyle(MaterialTheme.typography.button) { Row( // … content = content ) } } } }
Button
, 4 bileşenden oluşur:
Materyal
Surface
arka plan, şekil, tıklama işleme vb. sağlar.CEVAP
CompositionLocalProvider
Bu düğme, etkinleştirildiğinde veya devre dışı bırakıldığında içeriğin alfa değerini değiştirir.CEVAP
ProvideTextStyle
kullanılacak varsayılan metin stilini ayarlarRow
, düğmenin içeriği için varsayılan düzen politikasını sağlar
Yapıyı daha net hale getirmek için bazı parametreleri ve yorumları dahil etmedik, ancak
parçasının tamamı yalnızca yaklaşık 40 satırdan oluşur çünkü
oluşturmak için bu 4 bileşeni bir araya getirir. Button
gibi bileşenler
hangi parametreleri sundukları hakkında fikir sahibi olurlar.
patlama yaratacak bir bileşen olabilecek parametre patlamasına karşı
daha zordur. Örneğin, malzeme bileşenleri belirtilen özelleştirmeleri sunar
bu da malzeme tasarımını takip etmeyi kolaylaştırıyor.
ilkelerine uygun hareket etmenizi sağlar.
Bununla birlikte, bileşenin parametrelerinin ötesinde bir özelleştirme yapmak isterseniz
açılır menüden bir bileşeni çatallayın. Örneğin, Material
Tasarım, düğmelerin arka planı düz renkli olmalıdır. Şu durumda:
Gradyan arka planı gerekir, bu seçenek Button
tarafından desteklenmez
parametreleridir. Bu durumda, Material Button
uygulamasını bir
referans verip kendi bileşeninizi derleyin:
@Composable fun GradientButton( // … background: List<Color>, modifier: Modifier = Modifier, content: @Composable RowScope.() -> Unit ) { Row( // … modifier = modifier .clickable(onClick = {}) .background( Brush.horizontalGradient(background) ) ) { CompositionLocalProvider(/* … */) { // set material LocalContentAlpha ProvideTextStyle(MaterialTheme.typography.button) { content() } } } }
Yukarıdaki uygulama, Malzeme katmanındaki bileşenleri kullanmaya devam eder:
Materyal kavramları gibi
mevcut içerik alfa
ve geçerli metin stili. Ancak Surface
malzemesini
İstenen görünümü elde etmek için Row
ve stillerini ayarlayın.
Materyal kavramlarını hiç kullanmak istemiyorsanız, örneğin sipariş tasarım sistemi kullanıyorsanız, aşağıyı düşündüğünüzde katman bileşenleri:
@Composable fun BespokeButton( // … backgroundColor: Color, modifier: Modifier = Modifier, content: @Composable RowScope.() -> Unit ) { Row( // … modifier = modifier .clickable(onClick = {}) .background(backgroundColor) ) { // No Material components used content() } }
Jetpack Compose, en üst düzey bileşenler için en basit adları saklı tutar. Örneğin,
androidx.compose.material.Text
üzerine inşa edilmiştir
androidx.compose.foundation.text.BasicText
.
Bu, kendi uygulamanızı en olası şekilde sağlamanıza
bulunabilir adı.
Doğru soyutlamayı seçme
Compose'un katmanlı, yeniden kullanılabilir bileşenler oluşturma felsefesi, her zaman alt seviyedeki yapı taşlarına ulaşmamalıdır. Çok sayıda üst seviye bileşenler yalnızca daha fazla işlev sunmakla kalmaz, çoğu zaman en iyi uygulamaları Örneğin, erişilebilirliği desteklemek.
Örneğin, özel bileşeninize hareket desteği eklemek isterseniz
bunu sıfırdan oluşturmak için
Modifier.pointerInput
Ancak bunun üzerine inşa edilmiş daha yüksek seviyeli
daha iyi bir başlangıç noktası sağlayabilirsiniz.
Modifier.draggable
,
Modifier.scrollable
veya Modifier.swipeable
.
Kural olarak, derleme işlemini en üst düzeye çıkaran en üst düzey bileşende en iyi uygulamalardan yararlanmak için ihtiyaç duyacağınız işlevleri dahil.
Daha fazla bilgi
Bkz. Jetsnack örneği özel tasarım sistemi oluşturma örneği.
Sizin için önerilenler
- Not: JavaScript kapalıyken bağlantı metni gösterilir
- Jetpack Compose için Kotlin
- Listeler ve ızgaralar
- Compose'da yan etkiler