Tips kalkulaatori loomine Kotlinis: kuidas see töötab?

Tips kalkulaatori loomine Kotlinis: kuidas see töötab?

RÀÀgime, kuidas luua lihtne rakendus, et arvutada jootraha Kotlinis. TÀpsemalt Kotlin 1.3.21, Android 4, Android Studio 3. Artikkel on huvitav eelkÔige neile, kes alustavad oma teekonda Android-rakenduste arenduses. See aitab mÔista, kuidas ja mis rakenduses toimib.

Selline kalkulaator on kasulik, kui on vaja arvutada jootraha summa nhóm, kes otsustas aega veeta restoranis vÔi kohvikus. Muidugi ei jÀta kÔik ja alati teenindajatele jootraha, see on rohkem lÀÀne traditsioon, kuid sellise rakenduse arendamise protsess on igal juhul huvitav.

Tuletame meelde: kĂ”igile «Habr» lugejatele – 10 000 rubla allahindlus igale Skillboxi kursusele, kasutades sooduskoodi «Habr».

Skillbox soovitab: Praktiline kursus Mobiiliarendaja PRO.

Nii nÀeb rakendus vÀlja tööprotsessis:

Tips kalkulaatori loomine Kotlinis: kuidas see töötab?

Sisestate soovitud protsendi kogusummast, kohtumiste arvu ja saate tulemuse - jootraha summa, mille peaksite jÀtma.

Alustame

Rakenduse tÀisliides nÀeb vÀlja jÀrgmine:
Tips kalkulaatori loomine Kotlinis: kuidas see töötab?

Tips kalkulaatori loomine Kotlinis: kuidas see töötab?

Esimene tegevus - projekti aluse laadimine. Avame selle Android Studio 3.0 vÔi uuema versiooniga. Ehitage ja kÀivitage projekt ning nÀete valget ekraani. KÔik on korras, see on nii, nagu peab.

Tips kalkulaatori loomine Kotlinis: kuidas see töötab?

Tips kalkulaatori loomine Kotlinis: kuidas see töötab?

Kasutaja toimingud on projekti sarnases jÀrjestuses, et kÔik oleks arusaadav. Selle vaatamiseks avame View -> Tool Windows -> TODO.

Uurime projekti ja avame colors.xml, et hinnata vÀrvipaletti. Tekstid on salvestatud strings.xml ja styles.xmls on mitu fondimalli.

Kulude jaotuse arendamine

Avame activity_main.xml ja lisame allpool oleva koodi LinearLayout'i (#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"/>

NĂŒĂŒd saab seadistada stiili kausta values vĂ”i mĂ€ngida vĂ€rvidega, kasutades materjalide tööriista.

Praegu nÀeb projekt vÀlja nii:

Tips kalkulaatori loomine Kotlinis: kuidas see töötab?
Nagu nÀete, tehakse kulude arvutust vastavalt kasutaja sisestatud andmetele.

Arve jaotuse arendamine

Lisame allpool oleva koodi LinearLayout'i pÀrast Expense Section'i (#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>

Sulgeb LinearLayout pÀrast TODOde loetelu ja lisame seejÀrel uue koodi, paigutades selle LinearLayout'i sisse (#3):

Kuna rakenduse peamine eesmĂ€rk on igaĂŒhe kulude individuaalne arvutamine restoranis, mĂ€ngib costPerPersonTextView suurimat rolli.

EditText piirab andmete sisestamist ĂŒhe reaga, sellel parameetril peab olema NumberDecimal inputType vÀÀrtus.

Tips kalkulaatori loomine Kotlinis: kuidas see töötab?
KĂ€ivitame projekti testimiseks ja sisestame kogukahjude parameetrid (katkised tassid, taldrikud jne).

Jaotise „Inimesed jaTips“ arendamine

Kuna tahame lisada valiku jootrahade koguse kohta, sisestame allpool oleva koodi uude LinearLayout'i sektsiooni (#4):

See koodijupp on vajalik jootrahade summa tÀpseks arvutamiseks. Vaikimisi teksti vÀÀrtus on 20. ImageButton'id on varustatud ikoonidega kirjeldusÔigustes.

Kopeerime jaotise tÀielikult ja lisame jÀrgmise (#5):

  • ImageButton'i ids (subtractPeopleButton, addPeopleButton)
  • TextView ids (numberOfPeopleStaticText, numberOfPeopleTextView)
  • DefaultText numberOfPeopleTextView jaoks (peab olema 4).

Tips kalkulaatori loomine Kotlinis: kuidas see töötab?

NĂŒĂŒd rakenduse kĂ€ivitamisel on vĂ”imalus lisada arve summa, samuti töötavad nupud 'Lisa/VĂ”ta Ă€ra', kuid praegu ei toimu midagi.

Lisame Views

Avame MainActivity.kt ja lisame jÀrgmise initViews funktsiooni (#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
 
}

Viimeistelemme painikkeet

LisÀtÀÀn painikkeiden klikkaustuki kÀyttÀmÀllÀ View.OnClickListener-luokkaa (#7):

class MainActivity: AppCompatActivity(), View.OnClickListener {

Projektia ei voi kÀÀntÀÀ nyt, on suoritettava vielÀ muutama toimenpide (#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()
        }
    }

Kotlinissa painikkeiden ja kytkimien hallinta on todella hienoa! LisÀÀ alla oleva koodi kaikkiin increment- ja decrement-funktioihin
(#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()
        }
    }

TÀssÀ koodi suojaa increment-toiminnot maksimiarvoilta (MAX_TIP & MAX_PEOPLE). LisÀksi, koodi suojaa decrement-toiminnot minimimÀÀriltÀ (MIN_TIP & MIN_PEOPLE).

Nyt yhdistÀmme painikkeet kuuntelijoihin initViews-funktiossa (#13):

private fun initViews() {
 
...
 
addTipButton.setOnClickListener(this)
        subtractTipButton.setOnClickListener(this)
 
addPeopleButton.setOnClickListener(this)
        subtractPeopleButton.setOnClickListener(this)
 
//TODO #15: Bind EditText to TextWatcher
}

Tips kalkulaatori loomine Kotlinis: kuidas see töötab?

Nyt voimme laskea yhteiset kulut, tipit ja osallistujamÀÀrĂ€t. Ja nyt kaikkein tĂ€rkein


Kulujen laskenta jaottelu

TÀmÀ koodi laskee kulut (#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)
 
}

Ja tÀssÀ kutsutaan funktiota, joka ottaa huomioon ryhmÀn koon ja laskee tipit (#15):

private fun incrementTip() {
 


 
}
 
private fun decrementTip() {
 


 
}
 
private fun incrementPeople() {
 


 
}
 
private fun decrementPeople() {
 


 
}

KÀivitame rakenduse. See nÀeb vÀlja ja töötab suurepÀraselt. Kuid vÔiks veel parem olla.

Kui proovite kustutada arve summat ja seejÀrel suurendada vihjete vÔi sÔprade arvu, siis rakendus kukub, kuna kulude nullvÀÀrtuse kontrollimist pole veel tehtud. Veelgi enam, kui proovite muuta arve summat, kulud ei uuene.

LÔppastmed

Lisame TextWatcher (#16):

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

SeejÀrel lisame kuulaja billEditText (#17):

billEditText.addTextChangedListener(this)

Pluss lisame koodi TextWatcher'i teostamiseks (#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) {}

Tips kalkulaatori loomine Kotlinis: kuidas see töötab?

NĂŒĂŒd töötab kĂ”ik tĂ€iesti hĂ€sti! Palju Ă”nne, olete kirjutanud oma «Jootraha kalkulaatori» Kotlin'is.

Tips kalkulaatori loomine Kotlinis: kuidas see töötab?

Skillbox soovitab:

Allikas: habr.com

Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster