Einen Trinkgeldrechner in Kotlin erstellen: Wie funktioniert das?
Wir zeigen Ihnen, wie Sie in Kotlin eine einfache Trinkgeldberechnungsanwendung erstellen. Genauer gesagt: Kotlin 1.3.21, Android 4, Android Studio 3. Der Artikel wird vor allem für diejenigen interessant sein, die ihre Reise in die Entwicklung von Android-Anwendungen beginnen. Dadurch können Sie verstehen, was und wie in der Anwendung funktioniert.
Ein solcher Rechner ist nützlich, wenn Sie die Menge an Trinkgeldern berechnen müssen, die ein Unternehmen erhält, das Zeit in einem Restaurant oder Café verbringt. Natürlich überlässt nicht jeder und nicht immer den Tee den Kellnern, das ist eher eine westliche Tradition, aber der Prozess der Entwicklung einer solchen Anwendung ist auf jeden Fall interessant.
Erinnerung:für alle Leser von „Habr“ – ein Rabatt von 10 Rubel bei der Anmeldung zu einem beliebigen Skillbox-Kurs mit dem Aktionscode „Habr“.
Sie geben den gewünschten Prozentsatz des Gesamtbetrags, die Anzahl der Teilnehmer des Meetings ein und erhalten das Ergebnis – die Menge an Trinkgeld, die übrig bleiben soll.
Erste Schritte
Die vollständige Benutzeroberfläche der App sieht folgendermaßen aus:
Erste Aktion - Projektbasis herunterladen. Öffnen Sie es in Android Studio 3.0 oder höher. Wir erstellen und führen das Projekt aus und sehen einen weißen Bildschirm. Alles ist in Ordnung, so wie es sein sollte.
Benutzeraktionen werden im Projekt in chronologischer Reihenfolge geschrieben, sodass alles übersichtlich ist. Um es anzuzeigen, öffnen Sie Ansicht -> Werkzeugfenster -> TODO.
Wir studieren das Projekt und öffnen Colors.xml, um die Farbpalette auszuwerten. strings.xml enthält Textdaten (Untertitel) und Styles.xml enthält mehrere Schriftartvorlagen.
Entwicklung des Kostenbereichs
Öffnen Sie „activity_main.xml“ und fügen Sie den folgenden Code zum LinearLayout (#1) hinzu:
Da die Hauptaufgabe der Anwendung darin besteht, die individuellen Kosten für jeden Teilnehmer an den Zusammenkünften im Restaurant zu berechnen, spielt die costPerPersonTextView die Hauptrolle.
EditText begrenzt die Eingabe auf eine Zeile. Dieser Parameter muss auf NumberDecimal inputType gesetzt werden.
Wir starten das Projekt für den Test und geben die Parameter des Gesamtschadens ein (kaputte Tassen, Teller etc.)
Entwicklung der Rubrik „Menschen und Tipps“.
Um einen Trinkgeldbetrag-Selektor hinzuzufügen, fügen Sie den folgenden Code in einen neuen LinearLayout-Abschnitt (#4) ein:
Dieser Code ist erforderlich, um den Trinkgeldbetrag genau zu berechnen. Der Standardtextwert ist 20. ImageButtons werden mit Symbolen in einem Ordner mit Schreibrechten bereitgestellt.
Kopieren Sie den gesamten Abschnitt und fügen Sie Folgendes hinzu (#5):
Standardtext für numberOfPeopleTextView (sollte 4 sein).
Nun ist es beim Starten der Anwendung möglich, den Rechnungsbetrag zu addieren, die Schaltflächen Addieren/Subtrahieren funktionieren auch, aber bisher passiert nichts.
Ansichten hinzufügen
Öffnen Sie MainActivity.kt und fügen Sie dies der initViews-Funktion hinzu (#6):
Was Knöpfe und Schalter angeht, hat Kotlin alles sehr cool organisiert! Fügen Sie den folgenden Code zu allen Inkrementierungs- und Dekrementierungsfunktionen hinzu
(#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 schützt der Code Inkrementfunktionen mit Maximalwerten (MAX_TIP & MAX_PEOPLE). Darüber hinaus schützt der Code Dekrementierungsfunktionen mit Mindestwerten (MIN_TIP & MIN_PEOPLE).
Jetzt binden wir die Schaltflächen an die Listener in der initViews-Funktion (#13):
private fun initViews() {
...
addTipButton.setOnClickListener(this)
subtractTipButton.setOnClickListener(this)
addPeopleButton.setOnClickListener(this)
subtractPeopleButton.setOnClickListener(this)
//TODO #15: Bind EditText to TextWatcher
}
Sie können nun den Gesamtschaden, Trinkgelder und die Anzahl der Besprechungsteilnehmer hinzufügen. Nun, das Wichtigste...
Abschnitt „Kosten“.
Dieser Code berechnet die 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)
}
Nun, hier wird eine Funktion aufgerufen, die es ermöglicht, die Anzahl der Personen im Unternehmen zu berücksichtigen und das Trinkgeld zu berechnen (#15):
private fun incrementTip() {
…
}
private fun decrementTip() {
…
}
private fun incrementPeople() {
…
}
private fun decrementPeople() {
…
}
Wir starten die Anwendung. Es sieht großartig aus und funktioniert großartig. Aber es könnte besser sein.
Wenn Sie versuchen, den Rechnungsbetrag zu entfernen und dann die Anzahl der Hinweise oder Freunde zu erhöhen, stürzt die App ab, da noch keine Prüfung auf Nullkosten erfolgt. Wenn Sie außerdem versuchen, den Rechnungsbetrag zu ändern, werden die Gebühren nicht aktualisiert.