Bu sene Google IO iรงin fiziksel bir event covid-19 sebebiyle olamฤฑyor, stรผdyo kaydฤฑ iรงin de ofise gitmemek adฤฑna dijital kayฤฑt da olmayacaฤฤฑ aรงฤฑklandฤฑ ama bir diฤer yandan yine aynฤฑ tarihlerde bu yฤฑl yapฤฑlan รงalฤฑลmalarฤฑn da duyurulacaฤฤฑnฤฑ tahmin ediyoruz. Bu anlamda benim en รงok merak ettiฤim konulardan biri de Compose.
UI developmentla ilgili her sene รงeลitli update’ler oluyor ama geรงen sene Compose’la biraz ลaลฤฑrtฤฑcฤฑ bir giriล yapmฤฑล oldular. Android Summit sonrasฤฑ artฤฑk Android Studio’ya gradle dependecy’si olarak ekleyip deneyebilir duruma gelmiลtik. Ben ilk inceleme yazฤฑmฤฑ yaklaลฤฑk 1.5 ay รถnce yazdฤฑฤฤฑmdaysa gรผncel versiyon dev03’tรผ. Bu sene wtm sezonunda birkaรง chapter’da bu konuda sunum yapma fฤฑrsatฤฑm da oldu, sunumlarla paralel de aslฤฑnda geliลmeleri takip edip kendim iรงin yaptฤฑฤฤฑm sample projeyi gรผncel tutmaya รงalฤฑลtฤฑm. Bir diฤer deฤiลiklikleri gรผncel olarak takip edebileceฤiniz repo ise Google’ฤฑn compose’la geliลtirdiฤi sample app Jetnews‘in reposu. Api referanslarฤฑnda tam olarak nasฤฑl yapacaฤฤฑmฤฑ bulamadฤฑฤฤฑm ya da anlamadฤฑฤฤฑm durumlarda รงok faydalฤฑ olduฤunu sรถylemeliyim. รรผnkรผ developer.android de รงok uzunca bir sรผre anlatฤฑmฤฑnฤฑ dev03’e yapmฤฑลtฤฑ.
dev09 henรผz official olarak duyurulmadฤฑ. Dolayฤฑsฤฑyla yazฤฑnฤฑn baลฤฑnda da dediฤim gibi io’nun da tarihlerinin yakฤฑn olmasฤฑ sebebiyle codelab’ler, blog yazฤฑlarฤฑyla buraya eklenen yeni feature’larฤฑn anlatฤฑlacaฤฤฑnฤฑ umuyorum ๐
dev03’ten dev09’a giden yolda sadece basic text, imaj, buton gรถsterimi olan sample projemde en fazla etkilenen kฤฑsฤฑm ise imaj oldu. Ama ลunu da sรถylemeliyim ki dev03’ten dev09’a ya da 8’e direk geรงmiล aradaki versiyonlarฤฑ deneyimlememiล olsaydฤฑm bunu sรถylemezdim sanฤฑrฤฑm.
dev03:
@Composable | |
fun SpeakerInformation(speaker: SpeakerInfo) { | |
Column( | |
modifier = Spacing(16.dp) | |
) { | |
Container(modifier = Height(180.dp) wraps Expanded) { | |
Clip(RoundedCornerShape(5.dp)) { | |
DrawImage(image = speaker.image) | |
} | |
} | |
Text(speaker.name) | |
Text(speaker.title) | |
Text(speaker.sessionTitle) | |
} | |
} |
dev09:
@Composable | |
fun SpeakerImage(image: ImageAsset?) { | |
image?.let { | |
val imageModifier = Modifier | |
.preferredHeightIn(maxHeight = 180.dp) | |
.fillMaxWidth() | |
.clip(shape = RoundedCornerShape(4.dp)) | |
Image(image, modifier = imageModifier, contentScale = ContentScale.Crop) | |
} | |
} |
Bir รถnceki yazฤฑmda anlatฤฑrken imajฤฑn belli รถzelliklerde รงizilebilmesi iรงin, container objesinin iรงerisinde yer almasฤฑnฤฑ gerektiฤini, container’a modifier tanฤฑmlayarak imajฤฑmฤฑzฤฑ istediฤimiz gibi รงizdirebileceฤimizi anlatmฤฑลtฤฑm. 09’a evrilen yolda ise imaj kendisi modifier alabiliyor, container’a ihtiyaรง duymaksฤฑzฤฑn รงizebiliyoruz.
Yine รถrnekte de dikkat edileceฤi รผzere ilk versiyonda bir ลeyi modifier olarak kullanabilmek iรงin tam adฤฑnฤฑ bilmek ve bu ลekilde eklemek gerekiyordu, LayoutPadding, Flexible vs gibi. Bu ลimdi ise Modifier.<…> ลeklinde eriลebileceฤimiz ya da รงok daha developer friendly bir kullanฤฑma evrilmiล. Developer friendly demiลken 3’ten 9’a minor isim deฤiลikleri, paket deฤiลiklikleri, bazฤฑ constructor’da deฤiลiklikler oldu ama giden nokta hep kullanฤฑmฤฑ daha da basitleลtirme yรถnรผndeydi.
Bir diฤer beklenen konu iste listelerin geliลtirilmesinin stabilleลmesiydi. Android Summit’de recylerview yerine scrollinglist isminde ya da buna benzer bir yapฤฑ รผzerinde รงalฤฑลฤฑldฤฑฤฤฑ duyurulmuลtu. Ancak henรผz deneyebileceฤimiz bir versiyonu da api iรงerisinde mevcut deฤildi. Jetnews app’inde verticalscroller kullanฤฑlarak recyclerview benzeri yapฤฑlar implement edilmiลti. Bu baฤlamda ben de her yeni gelen update’de recylerview yerine gelecek component belli oldu mu yoksa verticalscoller’ฤฑn รงalฤฑลma prensibi/performansฤฑyla ilgili bir update geldi mi aรงฤฑklayacaklarฤฑ diye merakla bekliyordum.
adapterlist dev05’te duyurulmasฤฑna raฤmen henรผz jetnews’de de bununla ilgili bir update yapฤฑlmadฤฑ ancak aรงฤฑklamasฤฑndan recyclerview’e denk olduฤunu da anlฤฑyoruz.
@Composable fun <T> AdapterList(
data: List<T>,
modifier: Modifier = Modifier,
itemCallback: (T) -> Unit
): Unit
“A vertically scrolling list that only composes and lays out the currently visible items.”
Benim blog yazฤฑsฤฑ iรงin geliลtirdiฤim sample uygulamada denemek isteseydik ise aลaฤฤฑdaki ลekilde implement edecektik.
@Composable | |
fun SpeakerList(speakers: List<SpeakerInfo>){ | |
AdapterList(data = speakers) { | |
SpeakerInformation(speaker = it) | |
} | |
} |
Yeni gelecek haberleri de merakla bekliyoruz. ๐
Referanslar:
- https://developer.android.com/reference/kotlin/androidx/ui/foundation/package-summary
- https://developer.android.com/jetpack/compose/tutorial
Sample proje: https://github.com/ElifBon/ComposeIWD