Costruire un calcolatore di mance in Kotlin: come funziona?
Ti mostriamo come creare una semplice applicazione per il calcolo delle mance in Kotlin. Per essere più precisi, Kotlin 1.3.21, Android 4, Android Studio 3. L'articolo sarà interessante, prima di tutto, per coloro che iniziano il loro viaggio nello sviluppo di applicazioni Android. Ti permette di capire cosa e come funziona all'interno dell'applicazione.
Tale calcolatore è utile quando è necessario calcolare la quantità di mance da un'azienda che decide di trascorrere del tempo in un ristorante o in un bar. Certo, non tutti e non sempre lasciano il tè ai camerieri, questa è più una tradizione occidentale, ma il processo di sviluppo di un'applicazione del genere è comunque interessante.
Ti ricordiamo:per tutti i lettori di "Habr" - uno sconto di 10 rubli al momento dell'iscrizione a qualsiasi corso Skillbox utilizzando il codice promozionale "Habr".
Inserisci la percentuale desiderata dell'importo totale, il numero di partecipanti alla riunione e ottieni il risultato: la quantità di mance che dovrebbero essere lasciate.
Начинаем
L'interfaccia completa dell'app è simile a questa:
Prima azione - download della base del progetto. Aprilo in Android Studio 3.0 o versioni successive. Costruiamo ed eseguiamo il progetto e vediamo uno schermo bianco. Va tutto bene, come dovrebbe essere.
Le azioni dell'utente sono scritte nel progetto in ordine cronologico, in modo che tutto sia chiaro. Per visualizzarlo, apri Visualizza -> Tool Windows -> TODO.
Studiamo il progetto e apriamo colors.xml per valutare la tavolozza dei colori. strings.xml contiene dati di testo (didascalie) e styles.xml contiene diversi modelli di font.
Sviluppo della sezione dei costi
Apri activity_main.xml e aggiungi il codice seguente a LinearLayout (#1):
Poiché il compito principale dell'applicazione è calcolare i costi individuali per ciascuno dei partecipanti agli incontri nel ristorante, costPerPersonTextView svolge il ruolo principale.
EditText limita l'input a una riga, questo parametro deve essere impostato su NumberDecimal inputType.
Avviamo il progetto per il test e inseriamo i parametri del danno totale (tazze, piatti rotti, ecc.)
Sviluppo della sezione "Persone e Suggerimenti".
Per aggiungere un selettore dell'importo della mancia, incolla il codice qui sotto in una nuova sezione LinearLayout (#4):
Questo pezzo di codice è necessario per calcolare con precisione l'importo della mancia. Il valore di testo predefinito è 20. Gli ImageButton sono dotati di icone in una cartella con permessi di scrittura.
Copia l'intera sezione e aggiungi quanto segue (n. 5):
ID ImageButton (subtractPeopleButton, addPeopleButton)
ID TextView (numberOfPeopleStaticText, numberOfPeopleTextView)
DefaultText per numberOfPeopleTextView (dovrebbe essere 4).
Ora, all'avvio dell'applicazione, è possibile aggiungere l'importo della fattura, funzionano anche i pulsanti Aggiungi / Sottrai, ma non succede ancora nulla.
Aggiungi visualizzazioni
Apri MainActivity.kt e aggiungilo alla funzione initViews (#6):
In termini di pulsanti e interruttori, Kotlin ha organizzato tutto alla grande! Aggiungi il codice seguente a tutte le funzioni di incremento e decremento
(#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()
}
}
Qui il codice protegge le funzioni di incremento con valori massimi (MAX_TIP e MAX_PEOPLE). Inoltre, il codice protegge le funzioni di decremento con valori minimi (MIN_TIP e MIN_PEOPLE).
Ora leghiamo i pulsanti agli ascoltatori nella funzione initViews (#13):
private fun initViews() {
...
addTipButton.setOnClickListener(this)
subtractTipButton.setOnClickListener(this)
addPeopleButton.setOnClickListener(this)
subtractPeopleButton.setOnClickListener(this)
//TODO #15: Bind EditText to TextWatcher
}
Ora puoi aggiungere danni totali, suggerimenti e il numero di partecipanti alla riunione. Bene, ora la cosa più importante...
Sezione costi
Questo codice calcola i costi (#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)
}
Bene, qui viene chiamata una funzione che consente di tenere conto del numero di persone in azienda e calcolare la mancia (#15):
private fun incrementTip() {
…
}
private fun decrementTip() {
…
}
private fun incrementPeople() {
…
}
private fun decrementPeople() {
…
}
Lanciamo l'applicazione. Sembra e funziona alla grande. Ma potrebbe essere migliore.
Se provi a rimuovere l'importo del conto e poi aumenti il numero di suggerimenti o amici, l'app andrà in crash perché non c'è ancora il controllo per i costi zero. Inoltre, se provi a modificare l'importo della fattura, gli addebiti non verranno aggiornati.
Passi finali
Aggiungi TextWatcher (#16):
classe MainActivity: AppCompatActivity(), View.OnClickListener, TextWatcher {
Quindi incorporiamo il listener billEditText (#17):
billEditText.addTextChangedListener(questo)
Inoltre aggiungi il codice per eseguire 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) {}
Bene, ora funziona tutto! Congratulazioni, hai scritto il tuo "Calcolatrice di mance" in Kotlin.