Ndërtimi i një kalkulatori bakshish në Kotlin: si funksionon?
Ne ju tregojmë se si të krijoni një aplikacion të thjeshtë për llogaritjen e bakshishit në Kotlin. Për të qenë më të saktë, Kotlin 1.3.21, Android 4, Android Studio 3. Artikulli do të jetë interesant, para së gjithash, për ata që fillojnë rrugëtimin e tyre në zhvillimin e aplikacioneve Android. Kjo ju lejon të kuptoni se çfarë dhe si funksionon brenda aplikacionit.
Një kalkulator i tillë është i dobishëm kur duhet të llogaritni sasinë e bakshisheve nga një kompani që vendos të kalojë kohë në një restorant ose kafene. Sigurisht, jo të gjithë dhe jo gjithmonë lënë çaj për kamarierët, kjo është më shumë një traditë perëndimore, por procesi i zhvillimit të një aplikacioni të tillë është interesant në çdo rast.
Kujtojmë:për të gjithë lexuesit e "Habr" - një zbritje prej 10 rubla kur regjistroheni në çdo kurs Skillbox duke përdorur kodin promovues "Habr".
Ju futni përqindjen e dëshiruar të shumës totale, numrin e pjesëmarrësve në takim dhe merrni rezultatin - sasinë e këshillave që duhet të lihen.
Fillimi
Ndërfaqja e plotë e aplikacionit duket si kjo:
Veprimi i parë - shkarkimi i bazës së projektit. Hape atë në Android Studio 3.0 ose më vonë. Ne ndërtojmë dhe ekzekutojmë projektin dhe shohim një ekran të bardhë. Gjithçka është në rregull, siç duhet të jetë.
Veprimet e përdoruesit janë shkruar në projekt në rend kronologjik, në mënyrë që gjithçka të jetë e qartë. Për ta parë atë, hapni View -> Tool Windows -> TODO.
Ne studiojmë projektin dhe hapim ngjyrat.xml për të vlerësuar paletën e ngjyrave. strings.xml përmban të dhëna teksti (titrat), dhe styles.xml përmban disa shabllone fonti.
Zhvillimi i Seksionit të Kostos
Hapni activity_main.xml dhe shtoni kodin më poshtë në LinearLayout (#1):
Meqenëse detyra kryesore e aplikacionit është llogaritja e kostove individuale për secilin prej pjesëmarrësve në mbledhjet në restorant, kostoPerPersonTextView luan rolin kryesor.
EditText kufizon hyrjen në një rresht, ky parametër duhet të vendoset në NumberDecimal inputType.
Fillojmë projektin për provën dhe futim parametrat e dëmit total (kupa të thyera, pjata, etj.)
Zhvillimi i seksionit "Njerëz dhe këshilla".
Për të shtuar një përzgjedhës të shumës së bakshishit, ngjisni kodin më poshtë në një seksion të ri LinearLayout (#4):
Kjo pjesë e kodit kërkohet për të llogaritur me saktësi shumën e bakshishit. Vlera e parazgjedhur e tekstit është 20. ImageButtons ofrohen me ikona në një dosje me leje shkrimi.
Kopjoni të gjithë seksionin dhe shtoni sa vijon (#5):
ID-të e butonave të imazhit (zbresPeopleButton, shtoniPeopleButton)
ID-të e TextView (numberOfPeopleStaticText, numberOfPeopleTextView)
Teksti i paracaktuar për numrinOfPeopleTextView (duhet të jetë 4).
Tani me nisjen e aplikacionit mund të shtohet shuma e faturës, funksionojnë edhe butonat Shto/Zbris, por deri tani asgjë nuk ndodh.
Shto pamje
Hapni MainActivity.kt dhe shtoni këtë në funksionin initViews (#6):
Për sa i përket butonave dhe çelsave, Kotlin ka gjithçka të organizuar shumë mirë! Shtoni kodin më poshtë në të gjitha funksionet e rritjes dhe zvogëlimit
(#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()
}
}
Këtu kodi mbron funksionet e rritjes me vlera maksimale (MAX_TIP & MAX_PEOPLE). Për më tepër, kodi mbron funksionet e zvogëlimit me vlera minimale (MIN_TIP & MIN_PEOPLE).
Tani i lidhim butonat me dëgjuesit në funksionin initViews (#13):
private fun initViews() {
...
addTipButton.setOnClickListener(this)
subtractTipButton.setOnClickListener(this)
addPeopleButton.setOnClickListener(this)
subtractPeopleButton.setOnClickListener(this)
//TODO #15: Bind EditText to TextWatcher
}
Tani mund të shtoni dëmin total, këshilla dhe numrin e pjesëmarrësve në takim. Epo, tani gjëja më e rëndësishme ...
Seksioni i kostos
Ky kod llogarit kostot (#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)
}
Epo, këtu quhet një funksion që bën të mundur marrjen parasysh të numrit të njerëzve në kompani dhe llogaritjen e bakshishit (#15):
private fun incrementTip() {
…
}
private fun decrementTip() {
…
}
private fun incrementPeople() {
…
}
private fun decrementPeople() {
…
}
Ne hapim aplikacionin. Duket dhe funksionon shkëlqyeshëm. Por mund të ishte më mirë.
Nëse përpiqeni të hiqni shumën e faturës dhe më pas rritni numrin e këshillave ose miqve, aplikacioni do të prishet sepse nuk ka ende asnjë kontroll për kosto zero. Për më tepër, nëse përpiqeni të ndryshoni shumën e faturës, tarifat nuk do të përditësohen.
Hapat e fundit
Shto TextWatcher (#16):
Klasa MainActivity: AppCompatActivity(), View.OnClickListener, TextWatcher {
Më pas ne vendosim dëgjuesin e billEditText (#17):
billEditText.addTextChangedListener(kjo)
Plus shtoni kodin për të ekzekutuar TextWatcher (#18):
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) {}
Epo, tani gjithçka funksionon! Urime, ju keni shkruar "Llogaritësi i bakshishit" tuaj në Kotlin.