Een fooiencalculator bouwen in Kotlin: hoe werkt het?
We laten u zien hoe u in Kotlin een eenvoudige applicatie voor het berekenen van fooien kunt maken. Om preciezer te zijn, Kotlin 1.3.21, Android 4, Android Studio 3. Het artikel zal in de eerste plaats interessant zijn voor degenen die hun reis beginnen met het ontwikkelen van Android-applicaties. Hiermee kunt u begrijpen wat en hoe binnen de applicatie werkt.
Zo'n rekenmachine is handig als je het aantal fooien moet berekenen van een bedrijf dat besluit tijd door te brengen in een restaurant of café. Natuurlijk laat niet iedereen en niet altijd thee achter voor obers, dit is meer een westerse traditie, maar het proces van het ontwikkelen van een dergelijke applicatie is in ieder geval interessant.
Herinnering:voor alle lezers van "Habr" - een korting van 10 roebel bij inschrijving voor een Skillbox-cursus met behulp van de promotiecode "Habr".
U voert het gewenste percentage van het totaalbedrag in, het aantal deelnemers aan de bijeenkomst en krijgt het resultaat: het aantal fooien dat overblijft.
Aan de slag
De volledige interface van de app ziet er als volgt uit:
Eerste actie - projectbasis downloaden. Open het in Android Studio 3.0 of hoger. We bouwen en voeren het project uit en zien een wit scherm. Alles is in orde, zoals het zou moeten zijn.
Gebruikersacties worden in chronologische volgorde in het project geschreven om alles duidelijk te maken. Om het te bekijken, open je Beeld -> Hulpprogramma's -> TODO.
We bestuderen het project en openen Colors.xml om het kleurenpalet te evalueren. strings.xml bevat tekstgegevens (bijschriften) en stijlen.xml bevat verschillende lettertypesjablonen.
Ontwikkeling kostensectie
Open Activity_main.xml en voeg de onderstaande code toe aan de LinearLayout (#1):
Omdat de hoofdtaak van de applicatie het berekenen van de individuele kosten is voor elk van de deelnemers aan de bijeenkomsten in het restaurant, speelt de costPerPersonTextView de hoofdrol.
EditText beperkt de invoer tot één regel. Deze parameter moet worden ingesteld op NumberDecimal inputType.
We lanceren het project voor de test en voeren de parameters in voor algemene schade (gebroken kopjes, borden, enz.)
Ontwikkeling van de rubriek "Mensen en Tips".
Om een fooibedragkiezer toe te voegen, plakt u de onderstaande code in een nieuwe LinearLayout-sectie (#4):
Dit stukje code is nodig om het fooibedrag nauwkeurig te berekenen. De standaard tekstwaarde is 20. ImageButtons zijn voorzien van pictogrammen in een map met schrijfrechten.
Kopieer de hele sectie en voeg het volgende toe (#5):
DefaultText voor numberOfPeopleTextView (moet 4 zijn).
Wanneer u nu de applicatie start, is er de mogelijkheid om het factuurbedrag toe te voegen, de knoppen “Optellen/Aftrekken” werken ook, maar er gebeurt nog niets.
Weergaven toevoegen
Open MainActivity.kt en voeg dit toe aan de initViews-functie (#6):
Qua knoppen en schakelaars heeft Kotlin alles heel gaaf georganiseerd! Voeg de onderstaande code toe aan alle verhogings- en verlagingsfuncties
(#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()
}
}
Hier beschermt de code de ophoogfuncties met maximale waarden (MAX_TIP & MAX_PEOPLE). Bovendien beschermt de code de decrement-functies met minimumwaarden (MIN_TIP & MIN_PEOPLE).
Nu binden we de knoppen aan de luisteraars in de initViews-functie (#13):
private fun initViews() {
...
addTipButton.setOnClickListener(this)
subtractTipButton.setOnClickListener(this)
addPeopleButton.setOnClickListener(this)
subtractPeopleButton.setOnClickListener(this)
//TODO #15: Bind EditText to TextWatcher
}
U kunt nu de totale schade, fooien en het aantal deelnemers aan de vergadering toevoegen. Nou, nu het allerbelangrijkste...
Kostensectie
Deze code berekent de 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)
}
Welnu, hier wordt een functie genoemd die het mogelijk maakt om rekening te houden met het aantal mensen in het bedrijf en de fooi te berekenen (#15):
private fun incrementTip() {
…
}
private fun decrementTip() {
…
}
private fun incrementPeople() {
…
}
private fun decrementPeople() {
…
}
Laten we de applicatie starten. Het ziet er geweldig uit en werkt geweldig. Maar het kan beter.
Probeer je het factuurbedrag te verwijderen en vervolgens het aantal hints of vrienden te verhogen, dan crasht de app omdat er nog geen controle op nulkosten is. Als u bovendien het factuurbedrag probeert te wijzigen, worden de kosten niet bijgewerkt.