Budowanie kalkulatora napiwków w Kotlinie: jak to działa?
Pokazujemy, jak stworzyć prostą aplikację do obliczania napiwków w Kotlinie. A dokładniej Kotlin 1.3.21, Android 4, Android Studio 3. Artykuł zainteresuje przede wszystkim tych, którzy zaczynają swoją przygodę z tworzeniem aplikacji na Androida. Pozwala zrozumieć, co i jak działa wewnątrz aplikacji.
Taki kalkulator przydaje się, gdy trzeba obliczyć ilość napiwków od firmy, która decyduje się na spędzenie czasu w restauracji lub kawiarni. Oczywiście nie wszyscy i nie zawsze zostawiają herbatę dla kelnerów, jest to bardziej zachodnia tradycja, ale proces tworzenia takiej aplikacji jest i tak interesujący.
Przypomnienie:dla wszystkich czytelników „Habr” - rabat w wysokości 10 000 rubli przy zapisywaniu się na dowolny kurs Skillbox przy użyciu kodu promocyjnego „Habr”.
Wpisujesz żądany procent całkowitej kwoty, liczbę uczestników spotkania i otrzymujesz wynik - ilość napiwków, które należy zostawić.
Pierwsze kroki
Pełny interfejs aplikacji wygląda następująco:
Pierwsza akcja - pobieranie bazy projektu. Otwórz go w Android Studio 3.0 lub nowszym. Budujemy i uruchamiamy projekt i widzimy biały ekran. Wszystko jest w porządku, tak jak być powinno.
Działania użytkownika są zapisywane w projekcie w porządku chronologicznym, dzięki czemu wszystko jest jasne. Aby go wyświetlić, otwórz Widok -> Okna narzędzi -> TODO.
Studiujemy projekt i otwieramy colors.xml, aby ocenić paletę kolorów. strings.xml zawiera dane tekstowe (podpisy), a styles.xml zawiera kilka szablonów czcionek.
Rozwój Sekcji Kosztów
Otwórz plik activity_main.xml i dodaj poniższy kod do LinearLayout (#1):
Ponieważ głównym zadaniem aplikacji jest kalkulacja indywidualnych kosztów dla każdego z uczestników spotkań w restauracji, główną rolę odgrywa costPerPersonTextView.
EditText ogranicza wprowadzanie do jednego wiersza, ten parametr musi być ustawiony na NumberDecimal inputType.
Uruchamiamy projekt do testu i wpisujemy parametry uszkodzeń całkowitych (stłuczone kubki, talerze itp.)
Rozwój działu „Ludzie i porady”.
Aby dodać selektor kwoty napiwku, wklej poniższy kod do nowej sekcji LinearLayout (#4):
Ten fragment kodu jest wymagany do dokładnego obliczenia kwoty napiwku. Domyślna wartość tekstu to 20. ImageButtons są dostarczane z ikonami w folderze z uprawnieniami do zapisu.
Jeśli chodzi o przyciski i przełączniki, Kotlin ma wszystko zorganizowane bardzo fajnie! Dodaj poniższy kod do wszystkich funkcji zwiększania i zmniejszania
(#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()
}
}
Tutaj kod chroni funkcje inkrementacyjne o wartościach maksymalnych (MAX_TIP & MAX_PEOPLE). Dodatkowo kod chroni funkcje dekrementacji o wartościach minimalnych (MIN_TIP & MIN_PEOPLE).
Teraz łączymy przyciski ze słuchaczami w funkcji initViews (#13):
private fun initViews() {
...
addTipButton.setOnClickListener(this)
subtractTipButton.setOnClickListener(this)
addPeopleButton.setOnClickListener(this)
subtractPeopleButton.setOnClickListener(this)
//TODO #15: Bind EditText to TextWatcher
}
Możesz teraz dodać całkowite obrażenia, wskazówki i liczbę uczestników spotkania. No to teraz najważniejsze...
Sekcja kosztów
Ten kod oblicza koszty (#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)
}
Otóż tutaj wywoływana jest funkcja pozwalająca na uwzględnienie liczby osób w firmie i obliczenie napiwku (#15):
private fun incrementTip() {
…
}
private fun decrementTip() {
…
}
private fun incrementPeople() {
…
}
private fun decrementPeople() {
…
}
Uruchamiamy aplikację. Wygląda i działa świetnie. Ale mogłoby być lepiej.
Jeśli spróbujesz usunąć kwotę rachunku, a następnie zwiększysz liczbę wskazówek lub znajomych, aplikacja ulegnie awarii, ponieważ nie ma jeszcze czeku na zerowe koszty. Ponadto, jeśli spróbujesz zmienić kwotę faktury, opłaty nie zostaną zaktualizowane.
Ostatnie kroki
Dodaj TextWatchera (#16):
klasa MainActivity: AppCompatActivity(), View.OnClickListener, TextWatcher {
Następnie osadzamy detektor billEditText (#17):
billEditText.addTextChangedListener(to)
Plus dodaj kod, aby wykonać 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) {}
Cóż, teraz wszystko działa! Gratulacje, napisałeś swój własny "Kalkulator napiwków" w Kotlinie.