Att bygga en tipskalkylator i Kotlin: hur fungerar det?
Vi visar dig hur du skapar en enkel tipsberäkningsapplikation i Kotlin. För att vara mer exakt, Kotlin 1.3.21, Android 4, Android Studio 3. Artikeln kommer att vara intressant, först och främst, för dem som börjar sin resa med att utveckla Android-applikationer. Det låter dig förstå vad och hur som fungerar inuti applikationen.
En sådan kalkylator är användbar när du behöver beräkna mängden dricks från ett företag som bestämmer sig för att spendera tid på en restaurang eller ett café. Naturligtvis inte alla och inte alltid lämnar te för servitörer, detta är mer av en västerländsk tradition, men processen att utveckla en sådan applikation är intressant i alla fall.
Påminnelse:för alla läsare av "Habr" - en rabatt på 10 000 rubel när du anmäler dig till någon Skillbox-kurs med hjälp av "Habr"-kampanjkoden.
Du anger önskad procentandel av totalbeloppet, antal deltagare i mötet och får resultatet - mängden dricks som ska finnas kvar.
Komma igång
Appens fullständiga gränssnitt ser ut så här:
Första åtgärden - projektbas nedladdning. Öppna den i Android Studio 3.0 eller senare. Vi bygger och driver projektet och ser en vit skärm. Allt är bra, som det ska vara.
Användaråtgärder skrivs i projektet i kronologisk ordning, så att allt är tydligt. För att se det, öppna Visa -> Verktygsfönster -> TODO.
Vi studerar projektet och öppnar colors.xml för att utvärdera färgpaletten. strings.xml innehåller textdata (bildtexter) och styles.xml innehåller flera teckensnittsmallar.
Kostnadssektionens utveckling
Öppna activity_main.xml och lägg till koden nedan i LinearLayout (#1):
Eftersom applikationens huvuduppgift är att beräkna de individuella kostnaderna för var och en av deltagarna i sammankomsterna i restaurangen, spelar costPerPersonTextView huvudrollen.
EditText begränsar inmatningen till en rad, denna parameter måste ställas in på NumberDecimal inputType.
Vi startar projektet för testet och anger parametrarna för den totala skadan (trasiga koppar, tallrikar, etc.)
Utveckling av avsnittet "Människor och tips".
För att lägga till en dricksbeloppsväljare, klistra in koden nedan i en ny LinearLayout-sektion (#4):
DefaultText för NumberOfPeopleTextView (ska vara 4).
Nu när du startar applikationen är det möjligt att lägga till fakturabeloppet, Lägg till / Subtrahera knapparna fungerar också, men än så länge händer ingenting.
Lägg till vyer
Öppna MainActivity.kt och lägg till detta till initViews-funktionen (#6):
När det gäller knappar och omkopplare har Kotlin allt organiserat väldigt coolt! Lägg till koden nedan för alla inkrement- och minskningsfunktioner
(#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()
}
}
Här skyddar koden inkrementfunktioner med maximala värden (MAX_TIP & MAX_PEOPLE). Dessutom skyddar koden dekrementeringsfunktioner med minimivärden (MIN_TIP & MIN_PEOPLE).
Nu binder vi knapparna till lyssnarna i initViews-funktionen (#13):
private fun initViews() {
...
addTipButton.setOnClickListener(this)
subtractTipButton.setOnClickListener(this)
addPeopleButton.setOnClickListener(this)
subtractPeopleButton.setOnClickListener(this)
//TODO #15: Bind EditText to TextWatcher
}
Du kan nu lägga till total skada, tips och antalet mötesdeltagare. Nåväl, nu är det viktigaste...
Kostnadsdelen
Denna kod beräknar kostnaderna (#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)
}
Jo, här kallas en funktion som gör det möjligt att ta hänsyn till antalet personer i företaget och räkna ut dricks (#15):
private fun incrementTip() {
…
}
private fun decrementTip() {
…
}
private fun incrementPeople() {
…
}
private fun decrementPeople() {
…
}
Vi lanserar applikationen. Det ser ut och fungerar utmärkt. Men det kunde vara bättre.
Om du försöker ta bort räkningsbeloppet och sedan ökar antalet tips eller vänner kommer appen att krascha eftersom det inte finns någon kontroll för nollkostnader ännu. Dessutom, om du försöker ändra fakturabeloppet kommer avgifterna inte att uppdateras.
Sista stegen
Lägg till TextWatcher (#16):
class MainActivity: AppCompatActivity(), View.OnClickListener, TextWatcher {
Sedan bäddar vi in billEditText-lyssnaren (#17):
billEditText.addTextChangedListener(this)
Plus lägg till kod för att köra 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) {}
Nåväl, nu fungerar allt! Grattis, du har skrivit din egen "Tipping Calculator" i Kotlin.