Custruì una calculatrice di punta in Kotlin: cumu funziona?

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".

Skillbox consiglia: Corso praticu "Sviluppatore mobile PRO.

Eccu ciò chì l'app pare quandu hè in esecuzione:

Custruì una calculatrice di punta in Kotlin: cumu funziona?

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ì:
Custruì una calculatrice di punta in Kotlin: cumu funziona?

Custruì una calculatrice di punta in Kotlin: cumu funziona?

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.

Custruì una calculatrice di punta in Kotlin: cumu funziona?

Custruì una calculatrice di punta in Kotlin: cumu funziona?

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):

<TextView
    android_id="@+id/expensePerPersonTextView"
    android_layout_width="match_parent"
    android_layout_height="wrap_content"
    android_paddingTop="30dp"
    style="@style/h1Bold"
    android_textColor="@color/colorAccent"
    android_text="0"/>
 
<TextView
    android_layout_width="match_parent"
    android_layout_height="wrap_content"
    android_paddingBottom="25dp"
    style="@style/h2"
    android_textColor="@color/colorAccent"
    android_text="@string/perPersonStaticText"/>

Avà pudete stilà u repertoriu di valori o ghjucà cù i culori usendu strumentu material.io.

Avà u prughjettu s'assumiglia cusì:

Custruì una calculatrice di punta in Kotlin: cumu funziona?
Comu pudete vede, u calculu di u costu hè basatu annantu à i dati inseriti da l'utilizatore.

Sviluppu di a seccione di contu

Aghjunghjite u codice sottu à u LinearLayout dopu a Sezione di Spesa (#2):

<LinearLayout
    android_layout_width="match_parent"
    android_layout_height="match_parent"
    android_orientation="vertical"
    android_background="@color/colorAccent">
 
<! — TODO #3: Build Bill Section →
 
… 
</LinearLayout>

Chiudi u LinearLayout dopu a lista TODOs, è dopu aghjunghje u novu codice, mettendulu in LinearLayout (#3):

<TextView
      android_layout_margin="15dp"
      android_layout_width="match_parent"
      android_layout_height="wrap_content"
      android_textColor="@color/colorWhite"
      style="@style/h4"
      android_text="@string/billStaticText"/>
 
<EditText
      android_id="@+id/billEditText"
      android_layout_width="match_parent"
      android_layout_height="wrap_content"
      android_textColor="@color/colorWhite"
      android_inputType="numberDecimal"
      android_maxLines="1"
      style="@style/h2Bold"
      android_text="0"/>

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.

Custruì una calculatrice di punta in Kotlin: cumu funziona?
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):

<TextView
      android_layout_margin="15dp"
      android_layout_width="match_parent"
      android_layout_height="wrap_content"
      android_textColor="@color/colorWhite"
      style="@style/h4"
      android_text="@string/tipStaticText"/>
 
<LinearLayout
      android_layout_width="match_parent"
      android_layout_height="wrap_content"
      android_orientation="horizontal">
 
<ImageButton
        android_id="@+id/subtractTipButton"
        style="@style/operationButton"
        android_layout_marginLeft="20dp"
        android_layout_marginStart="20dp"
        android_src="@drawable/subtract"/>
 
<TextView
        android_id="@+id/tipTextView"
        android_layout_margin="15dp"
        android_layout_width="0dp"
        android_layout_height="wrap_content"
        android_textColor="@color/colorWhite"
        android_layout_weight="1"
        style="@style/h2Bold"
        android_text="20%"/>
 
<ImageButton
        android_id="@+id/addTipButton"
        style="@style/operationButton"
        android_layout_marginEnd="20dp"
        android_layout_marginRight="20dp"
        android_src="@drawable/add"/>
 
</LinearLayout>

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).

Custruì una calculatrice di punta in Kotlin: cumu funziona?

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):

private fun initViews() {
        expensePerPersonTextView = findViewById(R.id.expensePerPersonTextView)
        billEditText = findViewById(R.id.billEditText)
 
addTipButton = findViewById(R.id.addTipButton)
        tipTextView = findViewById(R.id.tipTextView)
        subtractTipButton = findViewById(R.id.subtractTipButton)
 
addPeopleButton = findViewById(R.id.addPeopleButton)
        numberOfPeopleTextView = findViewById(R.id.numberOfPeopleTextView)
        subtractPeopleButton = findViewById(R.id.subtractPeopleButton)
 
//TODO #8: Bind Buttons to Listener
 
//TODO #16: Bind EditText to TextWatcher
 
}

Finisci i buttoni

Per aghjunghje supportu per i clicchi di buttone, implementate View.OnClickListener à u livellu di classi (#7):

classa MainActivity: AppCompatActivity (), View.OnClickListener {

Cumpilà u prugettu avà ùn funziona micca, avete bisognu di fà uni pochi di passi più (# 8):

override fun onClick(v: View?) {
        when (v?.id) {
            R.id.addTipButton -> incrementTip()
            R.id.subtractTipButton -> decrementTip()
            R.id.addPeopleButton -> incrementPeople()
            R.id.subtractPeopleButton -> decrementPeople()
        }
    }

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
}

Custruì una calculatrice di punta in Kotlin: cumu funziona?

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.

Passi finali

Aggiungi TextWatcher (# 16):

classa MainActivity: AppCompatActivity (), View.OnClickListener, TextWatcher {

Allora incorporemu l'ascoltatore billEditText (#17):

billEditText.addTextChangedListener (questu)

Plus aghjunghje codice per eseguisce 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) {}

Custruì una calculatrice di punta in Kotlin: cumu funziona?

Ebbè, avà tuttu funziona! Felicitazioni, avete scrittu u vostru propiu "Tipping Calculator" in Kotlin.

Custruì una calculatrice di punta in Kotlin: cumu funziona?

Skillbox consiglia:

Source: www.habr.com

Add a comment