Jetpack Compose: Bahşiş Hesaplama Uygulaması Geliştirme Rehberi

ibrahimcanerdogan
3 min readMay 23, 2024

--

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.

➡️ SERTİFİKALI JETPACK COMPOSE KURSU 💯

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 bir Modifier ve bahşiş miktarını tutan bir MutableDoubleState 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 ikinci Text 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!

İbrahim Can Erdoğan

LINKEDIN

YOUTUBE

UDEMY

GITHUB

--

--

ibrahimcanerdogan
ibrahimcanerdogan

Written by ibrahimcanerdogan

Hi, My name is Ibrahim, I am developing ebebek android app within Ebebek. I publish various articles in the field of programming and self-improvement.

No responses yet