Kotlin'de bir bahşiş hesaplayıcı oluşturmak: nasıl çalışır?
Size Kotlin'de nasıl basit bir bahşiş hesaplama uygulaması oluşturacağınızı gösteriyoruz. Daha kesin olmak gerekirse, Kotlin 1.3.21, Android 4, Android Studio 3. Makale, öncelikle Android uygulamaları geliştirme yolculuğuna başlayanlar için ilginç olacak. Uygulama içinde neyin ve nasıl çalıştığını anlamanızı sağlar.
Böyle bir hesap makinesi, bir restoran veya kafede vakit geçirmeye karar veren bir şirketin verdiği bahşiş miktarını hesaplamanız gerektiğinde kullanışlıdır. Tabii ki, herkes ve her zaman garsonlar için çay bırakmaz, bu daha çok bir Batı geleneğidir, ancak böyle bir uygulamayı geliştirme süreci her durumda ilginçtir.
Hatırlatıyoruz:tüm "Habr" okuyucuları için - "Habr" promosyon kodunu kullanarak herhangi bir Skillbox kursuna kayıt olurken 10 ruble indirim.
Toplam tutarın istediğiniz yüzdesini, toplantıdaki katılımcı sayısını girersiniz ve sonucu alırsınız - bırakılması gereken bahşiş miktarı.
Başlarken
Uygulamanın tam arayüzü şöyle görünür:
İlk eylem - proje tabanı indir. Android Studio 3.0 veya sonrasında açın. Projeyi kurup çalıştırıyoruz ve beyaz bir ekran görüyoruz. Her şey yolunda, olması gerektiği gibi.
Kullanıcı eylemleri projede kronolojik sırayla yazılır, böylece her şey netleşir. Görüntülemek için Görünüm -> Araç Pencereleri -> YAPILACAKLAR'ı açın.
Projeyi inceliyoruz ve renk paletini değerlendirmek için colors.xml'i açıyoruz. strings.xml metin verilerini (resim yazıları) içerir ve styles.xml birkaç yazı tipi şablonu içerir.
Maliyet Bölümü Geliştirme
Activity_main.xml dosyasını açın ve aşağıdaki kodu LinearLayout'a (#1) ekleyin:
Uygulamanın ana görevi, restorandaki toplantılardaki her bir katılımcı için bireysel maliyetleri hesaplamak olduğu için, asıl rolü costPerPersonTextView oynuyor.
EditText girişi bir satırla sınırlar, bu parametre NumberDecimal inputType olarak ayarlanmalıdır.
Test için projeye başlıyoruz ve toplam hasarın (kırık bardak, tabak vb.) parametrelerini giriyoruz.
"Kişiler ve İpuçları" bölümünün geliştirilmesi
Bir bahşiş miktarı seçici eklemek için aşağıdaki kodu yeni bir LinearLayout bölümüne (#4) yapıştırın:
Bu kod parçası, bahşiş miktarını doğru bir şekilde hesaplamak için gereklidir. Varsayılan metin değeri 20'dir. ImageButtons, yazma izinlerine sahip bir klasörde simgelerle sağlanır.
Tüm bölümü kopyalayın ve aşağıdakileri (#5) ekleyin:
Düğmeler ve anahtarlar açısından, Kotlin her şeyi çok iyi organize etti! Tüm artırma ve eksiltme işlevlerine aşağıdaki kodu ekleyin
(#9 –#12):
private fun incrementTip() {
if (tipPercent != MAX_TIP) {
tipPercent += TIP_INCREMENT_PERCENT
tipTextView.text = String.format("%d%%", tipPercent)
}
}
private fun decrementTip() {
if (tipPercent != MIN_TIP) {
tipPercent -= TIP_INCREMENT_PERCENT
tipTextView.text = String.format("%d%%", tipPercent)
}
}
private fun incrementPeople() {
if (numberOfPeople != MAX_PEOPLE) {
numberOfPeople += PEOPLE_INCREMENT_VALUE
numberOfPeopleTextView.text = numberOfPeople.toString()
}
}
private fun decrementPeople() {
if (numberOfPeople != MIN_PEOPLE) {
numberOfPeople -= PEOPLE_INCREMENT_VALUE
numberOfPeopleTextView.text = numberOfPeople.toString()
}
}
Burada kod, artış fonksiyonlarını maksimum değerlerle (MAX_TIP & MAX_PEOPLE) korur. Ayrıca kod, azaltma fonksiyonlarını minimum değerlerle (MIN_TIP & MIN_PEOPLE) korur.
Şimdi düğmeleri initViews işlevindeki (#13) dinleyicilere bağlarız:
private fun initViews() {
...
addTipButton.setOnClickListener(this)
subtractTipButton.setOnClickListener(this)
addPeopleButton.setOnClickListener(this)
subtractPeopleButton.setOnClickListener(this)
//TODO #15: Bind EditText to TextWatcher
}
Artık toplam hasar, bahşiş ve toplantı katılımcılarının sayısını ekleyebilirsiniz. Peki, şimdi en önemli şey...
Maliyet bölümü
Bu kod maliyetleri hesaplar (#14):
private fun calculateExpense() {
val totalBill = billEditText.text.toString().toDouble()
val totalExpense = ((HUNDRED_PERCENT + tipPercent) / HUNDRED_PERCENT) * totalBill
val individualExpense = totalExpense / numberOfPeople
expensePerPersonTextView.text = String.format("$%.2f", individualExpense)
}
Pekala, burada şirketteki insan sayısını hesaba katmayı ve ipucunu hesaplamayı mümkün kılan bir işlev çağrılır (#15):
private fun incrementTip() {
…
}
private fun decrementTip() {
…
}
private fun incrementPeople() {
…
}
private fun decrementPeople() {
…
}
Uygulamayı başlatıyoruz. Harika görünüyor ve çalışıyor. Ama daha iyi olabilir.
Fatura tutarını kaldırmaya ve ardından ipuçlarının veya arkadaşların sayısını artırmaya çalışırsanız, henüz sıfır maliyet kontrolü olmadığı için uygulama çökecektir. Ayrıca fatura tutarını değiştirmeye çalışırsanız ücretler güncellenmeyecektir.
Son adımlar
TextWatcher'ı (#16) ekleyin:
sınıf MainActivity: AppCompatActivity(), View.OnClickListener, TextWatcher {
Ardından billEditText dinleyicisini (#17) yerleştiriyoruz:
billEditText.addTextChangedListener(bu)
Ayrıca TextWatcher'ı (#18) çalıştırmak için kod ekleyin:
override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
if (!billEditText.text.isEmpty()) {
calculateExpense()
}
}
override fun afterTextChanged(s: Editable?) {}
override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {}
Eh, şimdi her şey çalışıyor! Tebrikler, Kotlin'de kendi "Bahşiş Hesaplayıcınızı" yazdınız.