Jetpack Compose: Bahşiş Hesaplama Uygulaması Geliştirme Rehberi
Android uygulama geliştirmenin geleceği Jetpack Compose ile şekilleniyor! Bu kurs, Jetpack Compose’u kullanarak çeşitli Android uygulamaları geliştirmenin inceliklerini ve ileri seviye tekniklerini öğretmek için tasarlanmıştır.
Kurs boyunca, adım adım ilerleyerek Jetpack Compose’un temellerini öğrenecek ve gelişmiş yeteneklerini keşfedeceksiniz. Her bir bölüm, pratik projeler ve örneklerle desteklenmiştir, böylece öğrendiklerinizi hemen uygulayabilirsiniz.
Kursun İçeriği:
- Jetpack Compose Temelleri: Gelişmiş UI tasarımı ve layout yönetimi.
- Gelişmiş UI Tasarımı: Animasyonlar, dokunmatik etkileşimler ve modern kullanıcı deneyimi.
- Veri Yönetimi ve State Yönetimi: Veri akışları, ViewModel’ler ve state yönetimi teknikleri.
- Uygulama Geliştirme Stratejileri: Performans optimizasyonu, kod kalitesi ve best practices.
- Gerçek Dünya Projeleri: Pratik uygulamalar ve senaryolar üzerinde çalışmalar.
Kursun Sonunda Ne Elde Edeceksiniz?
Bu kursu tamamladıktan sonra, Jetpack Compose’u ustalıkla kullanarak gelişmiş Android uygulamaları geliştirebileceksiniz. Modern UI tasarımı, veri yönetimi, performans optimizasyonu ve daha fazlası konusunda derin bir bilgiye sahip olacaksınız.
Uygulama Geliştirme
Bu bölümde, Jetpack Compose kullanarak Android uygulamanızda kişi başına düşen toplam tutarı gösteren bir kart bileşeninin nasıl oluşturulacağını anlatacağız. Aşağıdaki kod parçacığı, bu bileşeni nasıl oluşturabileceğinizi gösterir:
@Composable
private fun TotalPerPersonCard(
totalPerPersonState: Double = 0.0
) {
Surface(
modifier = Modifier
.fillMaxWidth()
.padding(vertical = 10.dp, horizontal = 20.dp)
.height(150.dp)
.clip(RoundedCornerShape(CornerSize(20.dp))),
color = MaterialTheme.colorScheme.primaryContainer
) {
Column(
modifier = Modifier
.fillMaxSize()
.padding(20.dp),
horizontalAlignment = Alignment.CenterHorizontally,
verticalArrangement = Arrangement.Center
) {
val formatTotalPerPerson = "%.2f".format(totalPerPersonState)
Text(
text = "Total Per Person",
style = MaterialTheme.typography.headlineSmall,
fontWeight = FontWeight.SemiBold
)
Text(
text = "$$formatTotalPerPerson",
style = MaterialTheme.typography.headlineLarge,
fontWeight = FontWeight.ExtraBold
)
}
}
}
TipRow
Fonksiyonu: Bu fonksiyon, varsayılan birModifier
ve bahşiş miktarını tutan birMutableDoubleState
parametresi alır.Row
: Yatay bir düzen oluşturur ve içerisine verilen boşluklarla (padding) uygulanır.Text
Bileşenleri:- İlk
Text
: "Tip" metnini gösterir, siyah renkte, 20 sp font büyüklüğünde ve kalın (bold) olarak ayarlanır. Dikeyde ortalanır. Spacer
: İlk ve ikinciText
bileşenleri arasında boşluk bırakır.- İkinci
Text
: Bahşiş miktarını dolar işaretiyle birlikte gösterir, siyah renkte ve 18 sp font büyüklüğünde ayarlanır. Dikeyde ortalanır.
@Composable
private fun TipRow(
modifier: Modifier = Modifier,
tipAmountState: MutableDoubleState
) {
Row(
modifier = modifier.padding(horizontal = 3.dp, vertical = 12.dp)
) {
Text(
text = "Tip",
style = TextStyle(
color = Color.Black,
fontSize = 20.sp,
fontWeight = FontWeight.Bold
),
modifier = modifier.align(Alignment.CenterVertically)
)
Spacer(modifier = modifier.width(180.dp))
Text(
text = "$${tipAmountState.doubleValue}",
style = TextStyle(
color = Color.Black,
fontSize = 18.sp
),
modifier = modifier.align(Alignment.CenterVertically)
)
}
}
TipBar
Fonksiyonu: Bu fonksiyon, çeşitli durumları (total bill, slider position, tip amount, total per person, split by) ve bahşiş yüzdesini alır.Column
: Dikey bir düzen oluşturur ve içerikleri ortalar.Text
: Bahşiş yüzdesini gösterir.Slider
: Kullanıcının bahşiş yüzdesini ayarlayabilmesi için kaydırma çubuğu sağlar.value
: Kaydırıcının mevcut değerini ayarlar.onValueChange
: Kaydırıcı hareket ettikçe yeni değeri günceller.onValueChangeFinished
: Kullanıcı kaydırmayı bitirdiğinde, bahşiş miktarını ve kişi başına düşen toplamı hesaplar.
@Composable
private fun TipBar(
modifier: Modifier = Modifier,
totalBillState: MutableState<String>,
sliderPositionState: MutableFloatState,
tipPercentage: Int,
tipAmountState: MutableDoubleState,
totalPerPersonState: MutableDoubleState,
splitByState: MutableIntState
) {
Column(
verticalArrangement = Arrangement.Center,
horizontalAlignment = Alignment.CenterHorizontally
) {
Text(text = "$tipPercentage%")
Slider(
modifier = modifier.padding(horizontal = 15.dp),
value = sliderPositionState.floatValue,
onValueChange = {
sliderPositionState.floatValue = it
}, onValueChangeFinished = {
tipAmountState.doubleValue =
CalculateUtils.calculateTotalTip(totalBillState.value.toDouble(), tipPercentage)
totalPerPersonState.doubleValue = CalculateUtils.calculateTotalPerPerson(
totalBillState.value.toDouble(),
splitByState.intValue,
tipPercentage
)
}
)
}
}
Daha fazlası için GITHUB profilimi inceleyebilirsiniz.
Eğitmen;
Merhabalar,
Ben İbrahim Can Erdoğan, Balıkesir Üniversitesi Endüstri mühendisliği bölümünden 2022 senesinde mezun oldum. Java ve Kotlin ile ileri seviye Android uygulamaları geliştiriyorum. Android alanında çalışmalarımı sürdürüyorum. Ayrıca Blockchain teknolojisi ile ilgileniyorum. Şuanda Kotlin ile Android uygulamalar geliştiriyorum. Kariyerimde Yapı Kredi, QNB Finansbank, Ebebek ve LOGO Yazılım gibi Türkiye’nin önde gelen şirketlerinde stajlar gerçekleştirdim. LOGO Yazılım bünyesinde Yazılım Geliştirme Uzmanı olarak Android uygulamaların geliştirilmesine katkı sağladım. Şu anda ebebek bünyesinde Android Yazılım Geliştirme Uzmanı olarak rol almaktayım. Yeni yeni bilgiler öğrenmeye ve bu öğrendiklerimi kullanmaya çalışıyorum. Azmim ve hırsım ile her zaman daha iyisine ulaşmaya ve elimden gelenin her zaman en iyisi yapmaya çalışıyorum.
Teşekkür ederim
Hazır mısınız? Hemen Kaydolun ve Kariyerinizi Yükseltmeye Başlayın!