Custruì una calculatrice di punta in Kotlin: cumu funziona?
Vi mostremu cumu creà una applicazione simplice di calculu di punta in Kotlin. Per esse più precisu, Kotlin 1.3.21, Android 4, Android Studio 3. L'articulu serà interessante, prima di tuttu, per quelli chì cumincianu u so viaghju in u sviluppu di l'applicazioni Android. Permette di capisce ciò chì è cumu funziona in l'applicazione.
Una tale calculatrice hè utile quandu avete bisognu di calculà a quantità di cunsiglii da una cumpagnia chì decide di passà u tempu in un ristorante o cafe. Di sicuru, micca tutti è ùn lascianu micca sempre tè per i servitori, questu hè più di una tradizione occidentale, ma u prucessu di sviluppà una tale applicazione hè interessante in ogni casu.
Ramintemu:per tutti i lettori di "Habr" - un scontu di 10 000 rubles quandu si iscrizzione in ogni cursu Skillbox cù u codice promozionale "Habr".
Inserite u percentualità desiderata di a quantità tutale, u nùmeru di participanti à a riunione è uttene u risultatu - a quantità di cunsiglii chì deve esse lasciatu.
Cumminciate
L'interfaccia completa di l'app pare cusì:
prima azione - Scaricamentu di basa di prughjettu. Aprite in Android Studio 3.0 o più tardi. Custruemu è eseguimu u prugettu è vedemu un screnu biancu. Tuttu hè bè, cum'è deve esse.
L'azzioni di l'utilizatori sò scritte in u prugettu in ordine cronologicu, perchè tuttu hè chjaru. Per vede, apre View -> Tool Windows -> TODO.
Studiemu u prughjettu è apre colors.xml per evaluà a paleta di culori. strings.xml cuntene dati di testu (captions), è styles.xml cuntene parechji mudelli di font.
Sviluppu di a Sezione di Costu
Aprite activity_main.xml è aghjunghje u codice sottu à u LinearLayout (#1):
Siccomu u compitu principale di l'applicazione hè di calculà i costi individuali per ogni participante in una riunione di ristorante, costPersonTextView ghjoca u rolu principali.
EditText limita l'input à una linea, stu paràmetru deve esse stabilitu à NumberDecimal inputType.
Cuminciamu u prugettu per a prova è inserite i paràmetri di u dannu tutale (tazzi rotti, piatti, etc.)
Sviluppu di a rùbbrica "Persone è Cunsiglii".
Per aghjunghje un selettore di quantità di punta, incolla u codice sottu in una nova sezione LinearLayout (#4):
Stu pezzu di codice hè necessariu per calculà accuratamente a quantità di punta. U valore di testu predeterminatu hè 20. ImageButtons sò furniti cù icone in un cartulare cù permessi di scrittura.
Copia tutta a sezione è aghjunghje i seguenti (# 5):
ID di ImageButton (sottrà PeopleButton, addPeopleButton)
ID di TextView (numberOfPeopleStaticText, numberOfPeopleTextView)
DefaultText per NumberOfPeopleTextView (duverebbe esse 4).
Avà, quandu si principia l'applicazione, hè pussibule aghjunghje a quantità di fattura, i buttoni Add / Subtract funzionanu ancu, ma finu à avà ùn succede nunda.
Aggiungi Viste
Open MainActivity.kt è aghjunghje questu à a funzione initViews (#6):
In quantu à i buttoni è i switch, Kotlin hà tuttu urganizatu assai cool! Aghjunghjite u codice sottu à tutte e funzioni d'incrementu è di diminuzione
(# 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()
}
}
Quì u codice prutege e funzioni d'incrementu cù i valori massimi (MAX_TIP & MAX_PEOPLE). Inoltre, u codice prutege e funzioni di diminuzione cù valori minimi (MIN_TIP & MIN_PEOPLE).
Avà ligami i buttoni à l'ascultori in a funzione initViews (#13):
private fun initViews() {
...
addTipButton.setOnClickListener(this)
subtractTipButton.setOnClickListener(this)
addPeopleButton.setOnClickListener(this)
subtractPeopleButton.setOnClickListener(this)
//TODO #15: Bind EditText to TextWatcher
}
Pudete avà aghjunghje danni totali, cunsiglii, è u numeru di participanti à a riunione. Ebbè, avà u più impurtante ...
Sezione di costu
Stu codice calcula 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)
}
Ebbè, quì hè chjamatu una funzione chì permette di piglià in contu u numeru di persone in a cumpagnia è di calculà a punta (#15):
private fun incrementTip() {
…
}
private fun decrementTip() {
…
}
private fun incrementPeople() {
…
}
private fun decrementPeople() {
…
}
Lanciamu l'applicazione. Sembra è funziona bè. Ma puderia esse megliu.
Se pruvate à caccià a quantità di fattura è poi aumentà u numeru di suggerimenti o amichi, l'app falla perchè ùn ci hè micca un cuntrollu per i costi zero. Inoltre, se pruvate di cambià a quantità di fattura, i carichi ùn saranu micca aghjurnati.