It bouwen fan in tipkalkulator yn Kotlin: hoe wurket it?
Wy fertelle jo hoe't jo in ienfâldige applikaasje meitsje foar it berekkenjen fan tips yn Kotlin. Mear krekter, Kotlin 1.3.21, Android 4, Android Studio 3. It artikel sil ynteressant wêze, earst fan alles, foar dyjingen dy't har reis begjinne yn Android-applikaasjeûntwikkeling. It lit jo begripe wat en hoe't it wurket yn 'e applikaasje.
Dizze rekkenmasine sil fan pas komme as jo it bedrach fan tips moatte berekkenje fan in bedriuw dat beslút tiid troch te bringen yn in restaurant of kafee. Fansels, net elkenien lit altyd in tip oan de obers dit is mear in westerske tradysje, mar it proses fan it ûntwikkeljen fan sa'n applikaasje is yn alle gefallen nijsgjirrich.
Wy herinnerje:foar alle lêzers fan "Habr" - in koarting fan 10 roebel by it ynskriuwen fan in Skillbox-kursus mei de promoasjekoade "Habr".
Dit is hoe't de applikaasje derút sjocht yn wurking:
Jo fiere it winske persintaazje fan it totale bedrach, it oantal gearkomste dielnimmers, en krije it resultaat - it bedrach fan tip dat jo moatte ferlitte.
Begjin te begjinnen
De folsleine applikaasje-ynterface sjocht der sa út:
Earste aksje - it ynladen fan de projektbasis. Iepenje it yn Android Studio 3.0 of letter. Wy bouwe en lansearje it projekt en sjogge in wyt skerm. Alles is goed, sa moat it wêze.
Brûkersaksjes wurde yn it projekt yn gronologyske folchoarder skreaun om alles dúdlik te meitsjen. Om it te besjen, iepenje View -> Tool Windows -> TODO.
Wy studearje it projekt en iepenje colors.xml om it kleurpalet te evaluearjen. strings.xml befettet tekstgegevens (hântekeningen), en styles.xml befettet ferskate lettertypesjabloanen.
Untwikkeling fan kosten seksje
Iepenje activity_main.xml en foegje de koade hjirûnder ta oan de LinearLayout (#1):
Sûnt de haadtaak fan 'e applikaasje is om yndividuele kosten te berekkenjen foar elke dielnimmer oan in restaurantgearkomste, spilet costPerPersonTextView de haadrol.
EditText beheint de ynfier ta ien rigel, dizze parameter moat ynsteld wurde op NumberDecimal inputType.
Wy lansearje it projekt foar de test en fiere de parameters yn foar algemiene skea (brutsen bekers, platen, ensfh.)
Untwikkeling fan 'e seksje "Minsken en tips".
Om in seleksje fan tipvolumint ta te foegjen, plak de koade hjirûnder yn 'e nije LinearLayout-seksje (#4):
Dizze seksje fan koade is nedich om it tipbedrach sekuer te berekkenjen. De standert tekstwearde is 20. ImageButtons wurde foarsjoen fan ikoanen yn in map mei skriuwrjochten.
Kopiearje de seksje folslein en foegje it folgjende ta (#5):
Standerttekst foar numberOfPeopleTextView (moat 4 wêze).
No, as jo de applikaasje starte, is d'r in kâns om it faktuerbedrach ta te foegjen, de knoppen "Tafoegje / subtractearje" wurkje ek, mar der bart noch neat.
Views tafoegje
Iepenje MainActivity.kt en foegje dit ta oan de funksje initViews (#6):
Wat knoppen en skeakels oanbelanget, organisearret Kotlin alles heul cool! Foegje de koade hjirûnder ta oan alle tanimmende en fermindere funksjes
(#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()
}
}
Hjir beskermet de koade de ynkrementfunksjes mei maksimale wearden (MAX_TIP & MAX_PEOPLE). Derneist beskermet de koade de ferminderingsfunksjes mei minimale wearden (MIN_TIP & MIN_PEOPLE).
No assosjearje wy de knoppen mei harkers yn 'e funksje initViews (#13):
private fun initViews() {
...
addTipButton.setOnClickListener(this)
subtractTipButton.setOnClickListener(this)
addPeopleButton.setOnClickListener(this)
subtractPeopleButton.setOnClickListener(this)
//TODO #15: Bind EditText to TextWatcher
}
Jo kinne no totale skea, tips, en it oantal gearkomste dielnimmers tafoegje. No, no it wichtichste ...
Kosten berekkening seksje
Dizze koade berekkent kosten (#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, hjir wurdt in funksje neamd dy't it mooglik makket om rekken te hâlden mei it oantal minsken yn it bedriuw en tips te berekkenjen (#15):
private fun incrementTip() {
…
}
private fun decrementTip() {
…
}
private fun incrementPeople() {
…
}
private fun decrementPeople() {
…
}
Litte wy de applikaasje starte. It sjocht en wurket geweldich. Mar it koe better.
As jo besykje it rekkenbedrach te ferwiderjen en dan it oantal tips of freonen te ferheegjen, sil de applikaasje crashe, om't d'r noch gjin kontrôle is foar de nulkostenwearde. Boppedat, as jo besykje it rekkenbedrach te feroarjen, wurde de kosten net bywurke.