Kotlinda maslahat kalkulyatorini yaratish: u qanday ishlaydi?
Biz sizga Kotlin-da oddiy maslahatlarni hisoblash dasturini qanday yaratishni ko'rsatamiz. Aniqroq qilib aytadigan bo'lsak, Kotlin 1.3.21, Android 4, Android Studio 3. Maqola, birinchi navbatda, Android ilovalarini ishlab chiqishda o'z sayohatini boshlaganlar uchun qiziqarli bo'ladi. Bu sizga ilova ichida nima va qanday ishlashini tushunish imkonini beradi.
Bunday kalkulyator restoran yoki kafeda vaqt o'tkazishga qaror qilgan kompaniyadan maslahatlar miqdorini hisoblash kerak bo'lganda foydalidir. Albatta, har kim ham emas va har doim ham ofitsiantlar uchun choy qoldirmaydi, bu ko'proq G'arb an'anasidir, ammo bunday dasturni ishlab chiqish jarayoni har qanday holatda ham qiziqarli.
Sizga eslatib o'tamiz:"Habr" ning barcha o'quvchilari uchun - "Habr" promo-kodidan foydalangan holda har qanday Skillbox kursiga yozilishda 10 000 rubl chegirma.
Siz umumiy miqdorning kerakli foizini, yig'ilish ishtirokchilari sonini kiritasiz va natijani olasiz - qoldirish kerak bo'lgan maslahatlar miqdori.
Ishga kirishish
Ilovaning to'liq interfeysi quyidagicha ko'rinadi:
Birinchi harakat - Loyiha bazasi yuklab olish. Uni Android Studio 3.0 yoki undan keyingi versiyalarida oching. Biz loyihani quramiz va ishga tushiramiz va oq ekranni ko'ramiz. Hammasi yaxshi, xuddi shunday bo'lishi kerak.
Loyihada foydalanuvchi harakatlari xronologik tartibda yoziladi, shunda hamma narsa aniq bo'ladi. Uni ko'rish uchun View -> Tool Windows -> TODO ni oching.
Biz loyihani o'rganamiz va ranglar palitrasini baholash uchun colors.xml ni ochamiz. strings.xml matn ma'lumotlarini (taglavhalarni) o'z ichiga oladi va styles.xml bir nechta shrift shablonlarini o'z ichiga oladi.
Xarajatlar bo'limini ishlab chiqish
activity_main.xml faylini oching va quyidagi kodni LinearLayout (#1) ga qo'shing:
Ilovaning asosiy vazifasi restorandagi yig'ilishlarning har bir ishtirokchisi uchun individual xarajatlarni hisoblash bo'lganligi sababli, costPerPersonTextView asosiy rol o'ynaydi.
EditText kiritishni bitta satr bilan cheklaydi, bu parametr NumberDecimal inputType ga o'rnatilishi kerak.
Biz loyihani sinovdan o'tkazishni boshlaymiz va umumiy zarar parametrlarini kiritamiz (singan stakanlar, plitalar va boshqalar).
"Odamlar va maslahatlar" bo'limini ishlab chiqish
Maslahat miqdori tanlagichini qo'shish uchun quyidagi kodni yangi LinearLayout bo'limiga joylashtiring (№4):
Ushbu kod qismi maslahat miqdorini to'g'ri hisoblash uchun talab qilinadi. Standart matn qiymati 20. ImageButtons yozish ruxsati bilan jilddagi piktogramma bilan taʼminlangan.
Butun qismdan nusxa oling va quyidagini qo'shing (№5):
numberOfPeopleTextView uchun DefaultText (4 bo'lishi kerak).
Endi, dasturni ishga tushirayotganda, hisob-faktura miqdorini qo'shish mumkin, Qo'shish / Ayirish tugmalari ham ishlaydi, ammo hozircha hech narsa sodir bo'lmaydi.
Ko'rishlar qo'shish
MainActivity.kt ni oching va buni initViews funksiyasiga qo'shing (#6):
Tugmalar va kalitlarga kelsak, Kotlinda hamma narsa juda zo'r tartibga solingan! Quyidagi kodni barcha oshirish va kamaytirish funksiyalariga qo'shing
(#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()
}
}
Bu erda kod o'sish funktsiyalarini maksimal qiymatlar bilan himoya qiladi (MAX_TIP va MAX_PEOPLE). Bundan tashqari, kod kamaytirish funktsiyalarini minimal qiymatlar bilan himoya qiladi (MIN_TIP va MIN_PEOPLE).
Endi biz tugmalarni initViews funksiyasidagi tinglovchilarga bog'laymiz (№13):
private fun initViews() {
...
addTipButton.setOnClickListener(this)
subtractTipButton.setOnClickListener(this)
addPeopleButton.setOnClickListener(this)
subtractPeopleButton.setOnClickListener(this)
//TODO #15: Bind EditText to TextWatcher
}
Endi siz umumiy zarar, maslahatlar va yig'ilish ishtirokchilari sonini qo'shishingiz mumkin. Xo'sh, endi eng muhimi ...
Narxlar bo'limi
Ushbu kod xarajatlarni hisoblab chiqadi (№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)
}
Xo'sh, bu erda kompaniyadagi odamlar sonini hisobga olish va maslahatni hisoblash imkonini beradigan funktsiya chaqiriladi (№15):
private fun incrementTip() {
…
}
private fun decrementTip() {
…
}
private fun incrementPeople() {
…
}
private fun decrementPeople() {
…
}
Biz dasturni ishga tushiramiz. Bu ajoyib ko'rinadi va ishlaydi. Lekin yaxshiroq bo'lishi mumkin edi.
Agar siz hisob-kitob miqdorini olib tashlashga harakat qilsangiz va keyin maslahatlar yoki do'stlar sonini ko'paytirmoqchi bo'lsangiz, dastur nol xarajatlarni tekshirish yo'qligi sababli ishlamay qoladi. Bundan tashqari, agar siz hisob-faktura miqdorini o'zgartirmoqchi bo'lsangiz, to'lovlar yangilanmaydi.