Jetpack Compose, uygulamanızın kullanıcı arayüzünü tasarlamayı ve oluşturmayı çok daha kolay hale getirir. Oluşturma işlemi, aşağıdakileri kullanarak durumu kullanıcı arayüzü öğelerine dönüştürür:
- Bileşenlerin bileşimi
- Öğelerin düzeni
- Çizim öğeleri
Bu dokümanda öğelerin düzenine odaklanılarak Compose'un kullanıcı arayüzü öğelerinizi düzenlemenize yardımcı olmak için sağladığı bazı yapı taşları açıklanmaktadır.
Compose'da düzenlerin hedefleri
Düzen sisteminin Jetpack Compose uygulamasının iki ana hedefi vardır:
- Yüksek performans
- Özel düzenleri kolayca yazabilme
Birleştirilebilir işlevlerle ilgili temel bilgiler
Oluşturulabilir işlevler, Oluşturma'nın temel yapı taşıdır. Oluşturulabilir işlevler, kullanıcı arayüzünüzün bir kısmını açıklayan Unit
yayan bir işlevdir. İşlev, girdi alır ve ekranda gösterilenleri oluşturur. Oluşturulabilir öğeler hakkında daha fazla bilgi edinmek için zihinsel model oluşturma dokümanlarına göz atın.
Oluşturulabilir bir işlev birkaç kullanıcı arayüzü öğesi yayınlayabilir. Ancak bunların nasıl düzenlenmesi gerektiği konusunda yol gösterici bilgiler sağlamazsanız Compose öğeleri istemediğiniz bir şekilde düzenleyebilir. Örneğin, bu kod iki metin öğesi oluşturur:
@Composable fun ArtistCard() { Text("Alfred Sisley") Text("3 minutes ago") }
Oluşturulmasını istediğiniz şekilde düzenlemelerini istediğiniz bir rehber olmadığında, Oluştur uygulaması metin öğelerini birbirinin üzerine yığlar ve okunamaz hale getirir:
Compose, kullanıcı arayüzü öğelerinizi düzenlemenize yardımcı olmak için kullanıma hazır düzenlerden oluşan bir koleksiyon sağlar ve kendi özel düzenlerinizi tanımlamayı kolaylaştırır.
Standart düzen bileşenleri
Çoğu durumda, Oluşturma'nın standart düzen öğelerini kullanabilirsiniz.
Öğeleri ekrana dikey olarak yerleştirmek için Column
aracını kullanın.
@Composable fun ArtistCardColumn() { Column { Text("Alfred Sisley") Text("3 minutes ago") } }
Benzer şekilde, öğeleri ekrana yatay olarak yerleştirmek için Row
aracını kullanın. Hem Column
hem de Row
, içerdikleri öğelerin hizalamasının yapılandırılmasını destekler.
@Composable fun ArtistCardRow(artist: Artist) { Row(verticalAlignment = Alignment.CenterVertically) { Image(bitmap = artist.image, contentDescription = "Artist image") Column { Text(artist.name) Text(artist.lastSeenOnline) } } }
Öğeleri üst üste yerleştirmek için Box
özelliğini kullanın. Box
, içerdiği öğelerin belirli hizalamasının yapılandırılmasını da destekler.
@Composable fun ArtistAvatar(artist: Artist) { Box { Image(bitmap = artist.image, contentDescription = "Artist image") Icon(Icons.Filled.Check, contentDescription = "Check mark") } }
Genellikle bu yapı taşları tüm ihtiyacınız olan tek şeydir. Bu düzenleri uygulamanıza uygun daha ayrıntılı bir düzende birleştirmek için kendi kompozit işlevinizi yazabilirsiniz.
Row
içinde çocukların konumunu ayarlamak için horizontalArrangement
ve verticalAlignment
bağımsız değişkenlerini ayarlayın. Column
için verticalArrangement
ve horizontalAlignment
bağımsız değişkenlerini ayarlayın:
@Composable fun ArtistCardArrangement(artist: Artist) { Row( verticalAlignment = Alignment.CenterVertically, horizontalArrangement = Arrangement.End ) { Image(bitmap = artist.image, contentDescription = "Artist image") Column { /*...*/ } } }
Düzen modeli
Düzen modelinde, kullanıcı arayüzü ağacı tek bir kartta düzenlenmiştir. Önce her bir düğümün kendisini ölçmesi, ardından alt öğeleri yinelemeli olarak ölçmesi istenir. Böylece, boyut kısıtlamaları ağacın alt kısmındaki çocuklara iletilir. Daha sonra, yaprak düğümleri boyutlandırılır ve yerleştirilir. Çözümlenen boyutlar ve yerleşim talimatları da ağa geri aktarılır.
Özetlemek gerekirse, ebeveynler çocuklarından önce ölçüm yapar, ancak boyutlara göre ve çocuklarından sonra yerleştirilir.
Aşağıdaki SearchResult
işlevini düşünün.
@Composable fun SearchResult() { Row { Image( // ... ) Column { Text( // ... ) Text( // ... ) } } }
Bu işlev aşağıdaki kullanıcı arayüzü ağacını verir.
SearchResult
Row
Image
Column
Text
Text
SearchResult
örneğinde kullanıcı arayüzü ağaç düzeni şu sırayı izler:
Row
kök düğümünü ölçmesi isteniyor.Row
kök düğümü, ilk alt düğümden (Image
) ölçüm yapmasını ister.Image
, bir yaprak düğümdür (yani alt öğeleri yoktur), bu nedenle bir boyut bildirir ve yerleşim talimatlarını döndürür.Row
kök düğümü, ikinci alt öğesi olanColumn
'dan ölçüm yapmasını ister.Column
düğümü, ilkText
alt öğesinden ölçüm yapılmasını ister.- İlk
Text
düğümü bir yaprak düğümdür. Bu nedenle bir boyut bildirir ve yerleşim talimatlarını döndürür. Column
düğümü, ikinciText
alt öğesinden ölçüm yapılmasını ister.- İkinci
Text
düğümü bir yaprak düğümdür. Bu nedenle bir boyut bildirir ve yerleşim talimatlarını döndürür. Column
düğümü, alt öğelerini ölçtüğüne, boyutlandırdığına ve yerleştirdikten sonra kendi boyutunu ve yerleşimini belirleyebilir.Row
kök düğümü, alt öğelerini ölçtüğüne, boyutlandırdığına ve yerleştirdikten sonra kendi boyutunu ve yerleşimini belirleyebilir.
Performans
Compose, alt öğeleri yalnızca bir kez ölçerek yüksek performansa ulaşır. Tek geçişli ölçüm, performans için iyidir ve Compose'un derin kullanıcı arayüzü ağaçlarını verimli bir şekilde işlemesine olanak tanır. Bir öğe, alt öğesini iki kez ölçtüyse ve bu çocuk da alt öğelerinin her birini iki kez ölçtüyse tüm kullanıcı arayüzünü yerleştirmek için tek bir girişimde çok fazla çaba harcanır ve bu da uygulamanızın performansını sürdürmeyi zorlaştırır.
Düzeninizde herhangi bir nedenle birden fazla ölçüm gerekiyorsa Compose özel bir sistem olan doğuştan gelen ölçümler sunar. Oluşturma düzenlerinde içsel ölçümler bölümünde bu özellik hakkında daha fazla bilgi edinebilirsiniz.
Ölçüm ve yerleşim, düzen geçişinin farklı alt aşamaları olduğundan, ölçümü değil yalnızca öğelerin yerleşimini etkileyen değişiklikler ayrı olarak yürütülebilir.
Düzenlerinizde değiştiriciler kullanma
Oluşturma düzenleyicileri bölümünde açıklandığı gibi, bestelerinizi süslemek veya genişletmek için değiştiriciler kullanabilirsiniz. Değiştiriciler, düzeninizi
özelleştirmek için çok önemlidir. Örneğin, burada ArtistCard
öğesini özelleştirmek için
çeşitli değiştiricileri zincirleyeceğiz:
@Composable fun ArtistCardModifiers( artist: Artist, onClick: () -> Unit ) { val padding = 16.dp Column( Modifier .clickable(onClick = onClick) .padding(padding) .fillMaxWidth() ) { Row(verticalAlignment = Alignment.CenterVertically) { /*...*/ } Spacer(Modifier.size(padding)) Card( elevation = CardDefaults.cardElevation(defaultElevation = 4.dp), ) { /*...*/ } } }
Yukarıdaki kodda, farklı değiştirici işlevlerin birlikte kullanıldığına dikkat edin.
clickable
, kullanıcı girişine oluşturulabilir bir tepki verir ve bir dalga gösterir.padding
bir öğenin etrafına boşluk yerleştirir.fillMaxWidth
, composable dolguyu üst öğesinden kendisine verilen maksimum genişliği yapar.size()
, bir öğenin tercih edilen genişliğini ve yüksekliğini belirtir.
Kaydırılabilir düzenler
Kaydırılabilir düzenler hakkında daha fazla bilgiyi Hareketler oluşturma dokümanlarında bulabilirsiniz.
Listeler ve geç listeler için Liste oluşturma dokümanlarına göz atın.
Duyarlı düzenler
Düzen tasarımında farklı ekran yönleri ve form faktörü boyutları göz önünde bulundurulmalıdır. Oluşturma, oluşturduğunuz düzenlerinizi çeşitli ekran yapılandırmalarına uyarlamayı kolaylaştırmak için kullanıma hazır birkaç mekanizma sunar.
Sınırlamalar
Üst öğeden gelen kısıtlamaları bilmek ve düzeni buna uygun şekilde tasarlamak için BoxWithConstraints
kullanabilirsiniz. Ölçüm kısıtlamaları, içerik lambda kapsamında bulunabilir. Bu ölçüm kısıtlamalarını kullanarak farklı ekran yapılandırmaları için farklı düzenler oluşturabilirsiniz:
@Composable fun WithConstraintsComposable() { BoxWithConstraints { Text("My minHeight is $minHeight while my maxWidth is $maxWidth") } }
Slot tabanlı düzenler
Compose, kullanıcı arayüzü oluşturmayı kolaylaştırmak için androidx.compose.material:material
bağımlılığıyla (Android Studio'da Beste projesi oluştururken dahildir) Material Design (Materyal Tasarım) özelliğini temel alan çok çeşitli kompozisyonlar sunar. Drawer
,
FloatingActionButton
ve TopAppBar
gibi öğelerin tamamı sağlanır.
Malzeme bileşenleri, slot API'lerini yoğun bir şekilde kullanır. Oluşturulan bir kalıp, bestelenebilir öğelerin üzerine bir özelleştirme katmanı getirmek için kullanılır. Bu yaklaşım, alt öğelerin her yapılandırma parametresini açığa çıkarmak zorunda kalmadan kendi kendini yapılandırabilen bir alt öğeyi kabul ettiği için bileşenleri daha esnek hale getirir.
Slotlar, geliştiricinin istediği gibi doldurması için kullanıcı arayüzünde boş bir alan bırakır. Örneğin, TopAppBar
içinde özelleştirebileceğiniz alanlar şunlardır:
Oluşturulabilir öğeler genellikle content
birleştirilebilir lambda ( content: @Composable
() -> Unit
) alır. Slot API'leri belirli kullanımlar için birden fazla content
parametresi sunar.
Örneğin TopAppBar
; title
, navigationIcon
ve actions
için içerik sağlamanıza olanak tanır.
Örneğin, Scaffold
), temel Materyal Tasarım düzen yapısına sahip bir kullanıcı arayüzü uygulamanıza olanak tanır.
Scaffold
TopAppBar
,
BottomAppBar
,
FloatingActionButton
ve Drawer
gibi en yaygın üst düzey Materyal bileşenleri için alanlar sağlar. Scaffold
kullanıldığında, bu bileşenlerin düzgün şekilde konumlandırılıp birlikte düzgün çalışması kolaydır.
@Composable fun HomeScreen(/*...*/) { ModalNavigationDrawer(drawerContent = { /* ... */ }) { Scaffold( topBar = { /*...*/ } ) { contentPadding -> // ... } } }
Sizin için önerilenler
- Not: Bağlantı metni JavaScript kapalıyken gösterilir
- Oluşturma değiştiricileri
- Jetpack Compose için Kotlin
- Malzeme Bileşenleri ve düzenleri