Kugadzira tip Calculator muKotlin: inoshanda sei?

Kugadzira tip Calculator muKotlin: inoshanda sei?

Isu tinokuudza nzira yekugadzira yakapusa application yekuverenga matipi muKotlin. Kunyanya, Kotlin 1.3.21, Android 4, Android Studio 3. Nyaya yacho ichave inofadza, kutanga kune vose, kune avo vari kutanga rwendo rwavo mukugadzirwa kweAroid application. Inokubvumira kuti unzwisise kuti chii uye kuti chinoshanda sei mukati mekushandisa.

Iyi Calculator ichauya inobatsira kana iwe uchida kuverenga huwandu hwematipi kubva kukambani inosarudza kupedza nguva muresitorendi kana cafe. Ehe, haasi munhu wese anogara achisiya zano kune vanomirira; iyi ndiyo tsika yekuMadokero, asi maitiro ekugadzira akadaro application anonakidza chero zvakadaro.

Tinoyeuchidza: kune vese vaverengi veHabr - a 10 ruble mutengo paunenge uchinyoresa mune chero Skillbox kosi uchishandisa iyo Habr promo kodhi.

Skillbox inokurudzira: Nzira inoshanda "Mobile developer PRO.

Izvi ndizvo zvinoita senge application iri kushanda:

Kugadzira tip Calculator muKotlin: inoshanda sei?

Iwe unoisa iyo yaunoda muzana yehuwandu hwese, nhamba yevatori vechikamu, uye wowana mhedzisiro - huwandu hwetipi hwaunofanirwa kusiya.

Kutanga

Iyo yakazara application interface inoita seizvi:
Kugadzira tip Calculator muKotlin: inoshanda sei?

Kugadzira tip Calculator muKotlin: inoshanda sei?

Chiito chekutanga - kurodha pasi base yeprojekiti. Ivhure mu Android Studio 3.0 kana gare gare. Isu tinovaka uye kuvhura purojekiti uye tinoona chena skrini. Zvose zvakanaka, ndizvo zvazvinofanira kuva.

Kugadzira tip Calculator muKotlin: inoshanda sei?

Kugadzira tip Calculator muKotlin: inoshanda sei?

Zviito zvemushandisi zvinonyorwa mupurojekiti mukutevedzana kwenguva kuti zvese zvive pachena. Kuti uione, vhura Ona -> Tool Windows -> TODO.

Isu tinodzidza chirongwa nekuvhura mavara.xml kuti tiongorore palette yeruvara. strings.xml ine zvinyorwa zvemashoko (siginicha), uye masitayera.xml ine matemplate akati wandei.

Kuvandudza chikamu chemari

Vhura activity_main.xml wowedzera kodhi iri pazasi kune 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"/>

Iye zvino iwe unogona kutaira kukosha kwedhairekitori kana kutamba nemavara uchishandisa material.io tool.

Zvino purojekiti inoita seizvi:

Kugadzira tip Calculator muKotlin: inoshanda sei?
Sezvauri kuona, mari inoverengerwa zvichienderana nedata rakaiswa nemushandisi.

Kuvandudzwa kwechikamu cheakaundi

Wedzera iyo kodhi pazasi kune LinearLayout mushure meMutengo Chikamu (#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>

Isu tinovhara iyo LinearLayout mushure mekunyorwa kweTODO, tobva tawedzera kodhi nyowani, tichiiisa mukati meLinearLayout (#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"/>

Sezvo basa guru rekushandisa ndere kuverenga mutengo wemumwe nemumwe mutori wechikamu mugungano reresitorendi, costPerPersonTextView inoita basa guru.

EditText inoganhura kupinza kumutsara mumwe, iyi parameter inofanirwa kusetwa kuNhambaDecimal inputType.

Kugadzira tip Calculator muKotlin: inoshanda sei?
Isu tinotangisa purojekiti yebvunzo uye tinoisa maparamita ekukuvadza kwakawanda (makapu akatsemuka, mahwendefa, nezvimwewo)

Kuvandudzwa kwechikamu che "Vanhu uye Mazano".

Kuti uwedzere sarudzo yevhoriyamu, isa kodhi pazasi muchikamu chitsva cheLinearLayout (#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>

Ichi chikamu chekodhi chinodiwa kuti uverenge nemazvo mari yetip. Iko kukosha kwemavara ekutanga ndeye 20. ImageButtons anopiwa zvidhori mufolda ine mvumo yekunyora.

Kopa chikamu zvachose uye wowedzera zvinotevera (#5):

  • ImageButton ID (bvisaPeopleButton, addPeopleButton)
  • TextView ID(nhambaYePeopleStaticText, numberOfPeopleTextView)
  • DefaultText yenhambaOfPeopleTextView (inofanira kuva 4).

Kugadzira tip Calculator muKotlin: inoshanda sei?

Ikozvino, paunotanga chishandiso, pane mukana wekuwedzera iyo invoice mari, iyo "Wedzera / Bvisa" mabhatani anoshandawo, asi hapana chinoitika.

Kuwedzera Maonero

Vhura MainActivity.kt wowedzera izvi kune initViews basa (#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
 
}

Kupedzisa mabhatani

Kuwedzera tsigiro yekudzvanya mabhatani, tinoisa View.OnClickListener padanho rekirasi (#7):

kirasi MainActivity: AppCompatActivity(), View.OnClickListener {

Izvo hazvizogone kuunganidza purojekiti izvozvi; unofanirwa kuita mamwe nhanho mashoma (#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()
        }
    }

Panyaya yemabhatani uye switch, Kotlin anoronga zvese zvinotonhorera! Wedzera iyo kodhi pazasi kune ese ekuwedzera uye decrement mabasa
(#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()
        }
    }

Pano iyo kodhi inochengetedza mabasa ekuwedzera ane akanyanya kukosha (MAX_TIP & MAX_PEOPLE). Pamusoro pezvo, iyo kodhi inochengetedza mabasa ekudzikisira ane hudiki kukosha (MIN_TIP & MIN_PEOPLE).

Iye zvino tinosanganisa mabhatani nevateereri mune initViews basa (#13):

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

Kugadzira tip Calculator muKotlin: inoshanda sei?

Iwe zvino unogona kuwedzera kukuvadza kwakazara, matipi, uye nhamba yevatori vechikamu pamusangano. Zvakanaka, zvino chinhu chinonyanya kukosha ...

Chikamu chekuverenga mutengo

Iyi kodhi inoverengera mitengo (#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)
 
}

Zvakanaka, pano basa rinonzi rinoita kuti zvikwanise kufunga nezvehuwandu hwevanhu mukambani uye kuverenga matipi (#15):

private fun incrementTip() {
 
…
 
}
 
private fun decrementTip() {
 
…
 
}
 
private fun incrementPeople() {
 
…
 
}
 
private fun decrementPeople() {
 
…
 
}

Ngatitangei application. Inotaridzika uye inoshanda zvikuru. Asi zvingava nani.

Kana iwe ukaedza kubvisa mari yebhiri uye wobva wawedzera huwandu hwematipi kana shamwari, application yacho inopunzika nekuti hapasati pave cheki yemutengo we zero. Uyezve, kana ukaedza kuchinja mari yebhiri, mari yacho haigadziriswe.

Matanho ekupedzisira

Wedzera TextWatcher (#16):

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

Tinobva tadzvanya bhiriEditText muteereri (#17):

billEditText.addTextChangedListener(uyu)

Uyezve isu tinowedzera kodhi yekuita 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) {}

Kugadzira tip Calculator muKotlin: inoshanda sei?

Zvakanaka, zvino zvachose zvese zvinoshanda! Makorokoto, iwe wakanyora yako wega "Tip Calculator" muKotlin.

Kugadzira tip Calculator muKotlin: inoshanda sei?

Skillbox inokurudzira:

Source: www.habr.com

Voeg