Ustvarjanje kalkulatorja napitnin v Kotlinu: kako deluje?
Povemo vam, kako ustvariti preprosto aplikacijo za izračun napitnin v Kotlinu. Natančneje, Kotlin 1.3.21, Android 4, Android Studio 3. Članek bo zanimiv predvsem za tiste, ki začenjajo svojo pot v razvoju aplikacij za Android. Omogoča vam razumevanje, kaj in kako deluje znotraj aplikacije.
Ta kalkulator vam bo prišel prav, ko boste morali izračunati znesek napitnine podjetja, ki se odloči preživeti čas v restavraciji ali kavarni. Seveda vsi ne pustijo vedno napitnine natakarjem, to je bolj zahodna tradicija, a je proces razvoja takšne aplikacije v vsakem primeru zanimiv.
Spomnimo:za vse bralce "Habr" - popust v višini 10 rubljev ob vpisu v kateri koli tečaj Skillbox s promocijsko kodo "Habr".
Vnesete želeni odstotek skupnega zneska, število udeležencev sestanka in dobite rezultat - znesek napitnine, ki ga morate pustiti.
Начинаем
Celoten vmesnik aplikacije izgleda takole:
Prvo dejanje - prenos baze projekta. Odprite ga v Android Studio 3.0 ali novejšem. Gradimo in zaženemo projekt ter vidimo bel zaslon. Vse je v redu, tako mora biti.
Uporabniška dejanja so zapisana v projektu v kronološkem vrstnem redu, da je vse jasno. Za ogled odprite Pogled -> Orodja Windows -> OPRAVILA.
Preučimo projekt in odpremo colors.xml, da ocenimo barvno paleto. strings.xml vsebuje besedilne podatke (podpise), styles.xml pa vsebuje več predlog pisav.
Razvoj stroškovnega dela
Odprite activity_main.xml in dodajte spodnjo kodo v LinearLayout (#1):
Ker je glavna naloga aplikacije izračunavanje individualnih stroškov za vsakega udeleženca gostinskega druženja, ima glavno vlogo costPerPersonTextView.
EditText omejuje vnos na eno vrstico, ta parameter mora biti nastavljen na NumberDecimal inputType.
Projekt zaženemo v test in vnesemo parametre za splošne poškodbe (zlomljene skodelice, krožniki itd.)
Razvoj razdelka »Ljudje in nasveti«.
Če želite dodati izbiro volumna konice, prilepite spodnjo kodo v nov razdelek LinearLayout (št. 4):
Ta del kode je potreben za natančen izračun zneska napitnine. Privzeta besedilna vrednost je 20. ImageButtons so opremljeni z ikonami v mapi z dovoljenji za pisanje.
Popolnoma kopirajte razdelek in dodajte naslednje (št. 5):
Kar zadeva gumbe in stikala, Kotlin organizira vse zelo kul! Spodnjo kodo dodajte vsem funkcijam inkrementa in dekrementa
(#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()
}
}
Tukaj koda ščiti funkcije povečanja z največjimi vrednostmi (MAX_TIP & MAX_PEOPLE). Poleg tega koda ščiti dekrementne funkcije z minimalnimi vrednostmi (MIN_TIP & MIN_PEOPLE).
Zdaj povezujemo gumbe s poslušalci v funkciji initViews (#13):
private fun initViews() {
...
addTipButton.setOnClickListener(this)
subtractTipButton.setOnClickListener(this)
addPeopleButton.setOnClickListener(this)
subtractPeopleButton.setOnClickListener(this)
//TODO #15: Bind EditText to TextWatcher
}
Zdaj lahko dodate skupne odškodnine, nasvete in število udeležencev sestanka. No, zdaj pa najpomembnejše...
Oddelek za izračun stroškov
Ta koda izračuna stroške (#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)
}
No, tukaj se imenuje funkcija, ki omogoča upoštevanje števila ljudi v podjetju in izračun napitnin (#15):
private fun incrementTip() {
…
}
private fun decrementTip() {
…
}
private fun incrementPeople() {
…
}
private fun decrementPeople() {
…
}
Zaženimo aplikacijo. Izgleda in deluje odlično. Ampak lahko bi bilo bolje.
Če poskušate odstraniti znesek računa in nato povečati število napitnin ali prijateljev, se bo aplikacija zrušila, ker še ni preverjanja vrednosti ničelnih stroškov. Poleg tega, če poskušate spremeniti znesek računa, stroški ne bodo posodobljeni.
Zadnji koraki
Dodaj TextWatcher (#16):
class MainActivity: AppCompatActivity(), View.OnClickListener, TextWatcher {
Nato vdelamo poslušalca billEditText (#17):
billEditText.addTextChangedListener(this)
Poleg tega dodamo kodo za izvajanje TextWatcherja (#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) {}
No, zdaj popolnoma vse deluje! Čestitamo, napisali ste svoj »Kalkulator napitnin« v Kotlinu.