A 'cruthachadh àireamhair tip ann an Kotlin: ciamar a tha e ag obair?

A 'cruthachadh àireamhair tip ann an Kotlin: ciamar a tha e ag obair?

Innsidh sinn dhut mar a chruthaicheas tu tagradh sìmplidh airson molaidhean obrachadh a-mach ann an Kotlin. Nas mionaidiche, Kotlin 1.3.21, Android 4, Android Studio 3. Bidh an artaigil inntinneach, an toiseach, dhaibhsan a tha a 'tòiseachadh air an turas ann an leasachadh aplacaid Android. Leigidh e leat tuigsinn dè agus ciamar a tha e ag obair taobh a-staigh an tagraidh.

Bidh an àireamhair seo feumail nuair a dh’ fheumas tu obrachadh a-mach na tha de mholaidhean bho chompanaidh a cho-dhùnas ùine a chaitheamh ann an taigh-bìdh no cafaidh. Gu dearbh, chan eil a h-uile duine an-còmhnaidh a 'fàgail tip don luchd-frithealaidh; tha seo nas motha de dhualchas an Iar, ach tha am pròiseas airson a leithid de thagradh a leasachadh inntinneach co-dhiù.

Tha sinn a ’cur nar cuimhne: airson a h-uile leughadair de "Habr" - lasachadh de 10 rubles nuair a chlàraicheas tu ann an cùrsa sam bith Skillbox a 'cleachdadh a' chòd adhartachaidh "Habr".

Tha Skillbox a’ moladh: Cùrsa practaigeach “Leasaiche gluasadach PRO.

Seo cò ris a tha an tagradh coltach ann an gnìomh:

A 'cruthachadh àireamhair tip ann an Kotlin: ciamar a tha e ag obair?

Bidh thu a’ dol a-steach don àireamh sa cheud den t-suim iomlan a tha thu ag iarraidh, an àireamh de chom-pàirtichean coinneimh, agus gheibh thu an toradh - an ìre de thip a bu chòir dhut fhàgail.

A 'tòiseachadh

Tha an eadar-aghaidh tagraidh iomlan a’ coimhead mar seo:
A 'cruthachadh àireamhair tip ann an Kotlin: ciamar a tha e ag obair?

A 'cruthachadh àireamhair tip ann an Kotlin: ciamar a tha e ag obair?

A' chiad ghnìomh - Luchdaich a-nuas am pròiseact air bunait. Fosgail e ann an Android Studio 3.0 no nas fhaide air adhart. Bidh sinn a’ togail agus a’ cur air bhog am pròiseact agus a’ faicinn sgrion geal. Tha a h-uile dad gu math, sin mar a bu chòir a bhith.

A 'cruthachadh àireamhair tip ann an Kotlin: ciamar a tha e ag obair?

A 'cruthachadh àireamhair tip ann an Kotlin: ciamar a tha e ag obair?

Tha gnìomhan luchd-cleachdaidh air an sgrìobhadh sa phròiseact ann an òrdugh àraid gus a h-uile dad a dhèanamh soilleir. Gus fhaicinn, fosgail View -> Inneal Windows -> TODO.

Bidh sinn a’ sgrùdadh a’ phròiseict agus a’ fosgladh colors.xml gus am paileas dath a mheasadh. Tha dàta teacsa (ainm-sgrìobhte) ann an strings.xml, agus tha grunn teamplaidean cruth-clò ann an styles.xml.

Leasachadh earrann cosgais

Fosgail activity_main.xml agus cuir an còd gu h-ìosal ris an 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"/>

A-nis faodaidh tu an eòlaire luachan a stoidhle no cluich le dathan a’ cleachdadh stuth.io inneal.

A-nis tha am pròiseact a’ coimhead mar seo:

A 'cruthachadh àireamhair tip ann an Kotlin: ciamar a tha e ag obair?
Mar a chì thu, tha cosgaisean air an tomhas a rèir an dàta a chuir an neach-cleachdaidh a-steach.

Leasachadh earrann nan cunntasan

Cuir an còd gu h-ìosal ris an LinearLayout às deidh an Roinn Cosgais (#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>

Bidh sinn a’ dùnadh an LinearLayout às deidh an liosta de TODOn, agus an uairsin cuiridh sinn còd ùr ris, ga chuir am broinn an 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"/>

Leis gur e prìomh obair an tagraidh cosgaisean fa-leth obrachadh a-mach airson gach com-pàirtiche ann an cruinneachadh taigh-bìdh, is e costPerPersonTextView am prìomh àite.

Tha EditText a’ cuingealachadh an cuir a-steach gu aon loidhne, feumaidh am paramadair seo a bhith air a shuidheachadh gu NumberDecimal inputType.

A 'cruthachadh àireamhair tip ann an Kotlin: ciamar a tha e ag obair?
Bidh sinn a 'cur air bhog am pròiseact airson an deuchainn agus a' dol a-steach do na crìochan airson milleadh coitcheann (cupannan briste, truinnsearan, msaa)

Leasachadh na h-earrainn “Daoine is Molaidhean”.

Gus taghadh meud tip a chuir ris, cuir a-steach an còd gu h-ìosal a-steach don roinn ùr 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>

Tha an earrann seo den chòd riatanach gus tomhas ceart a dhèanamh air an t-suim tip. Is e an luach teacsa bunaiteach 20. Tha ìomhaighean air an toirt seachad le ImageButtons ann am pasgan le ceadan sgrìobhaidh.

Dèan lethbhreac den earrann gu tur agus cuir na leanas (#5):

  • ID ImageButton (toirt air falbhPeopleButton, cuirPeopleButton)
  • IDs TextView (àireamhOfPeopleStaticText, numberOfPeopleTextView)
  • DefaultText airson numberOfPeopleTextView (feumaidh seo a bhith 4).

A 'cruthachadh àireamhair tip ann an Kotlin: ciamar a tha e ag obair?

A-nis, nuair a chuireas tu an tagradh air bhog, tha cothrom ann suim an fhàirdeal a chuir ris, bidh na putanan “Cuir ris / Thoir air falbh” cuideachd ag obair, ach chan eil dad a ’tachairt fhathast.

A' cur Seallaidhean ris

Fosgail MainActivity.kt agus cuir seo ris a’ ghnìomh 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
 
}

A 'crìochnachadh na putanan

Gus taic a chuir ri cliogan putan, bidh sinn a’ cur View.OnClickListener an gnìomh aig ìre clas (#7):

Prìomh Ghnìomh clas: AppCompatActivity(), View.OnClickListener {

Cha bhith e comasach am pròiseact a chur ri chèile an-dràsta; feumaidh tu beagan cheumannan eile a dhèanamh (#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()
        }
    }

A thaobh putanan agus suidsichean, bidh Kotlin ag eagrachadh a h-uile dad gu math fionnar! Cuir an còd gu h-ìosal ris a h-uile gnìomh meudachaidh is lughdachadh
(#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()
        }
    }

An seo tha an còd a' dìon gnìomhan àrdachaidh le luachan as àirde (MAX_TIP & MAX_PEOPLE). A bharrachd air an sin, bidh an còd a’ dìon gnìomhan lughdachadh le luachan as ìsle (MIN_TIP & MIN_PEOPLE).

A-nis bidh sinn a’ ceangal nam putanan le luchd-èisteachd anns a’ ghnìomh initViews (#13):

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

A 'cruthachadh àireamhair tip ann an Kotlin: ciamar a tha e ag obair?

Faodaidh tu a-nis milleadh iomlan, molaidhean, agus an àireamh de chom-pàirtichean coinneimh a chuir ris. Uill, a-nis an rud as cudromaiche ...

Earrann àireamhachadh cosgais

Bidh an còd seo a’ tomhas chosgaisean (#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)
 
}

Uill, an seo canar gnìomh a tha ga dhèanamh comasach aire a thoirt don àireamh de dhaoine sa chompanaidh agus obrachadh a-mach molaidhean (#15):

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

Leig leinn an tagradh a chuir air bhog. Tha e a’ coimhead agus ag obair gu math. Ach dh’ fhaodadh e a bhith nas fheàrr.

Ma dh’ fheuchas tu ri suim a’ bhile a thoirt air falbh agus an àireamh de mholaidhean no charaidean àrdachadh, tuitidh an tagradh leis nach eil seic ann fhathast airson an luach cosgais neoni. A bharrachd air an sin, ma dh’ fheuchas tu ri meud a’ bhile atharrachadh, cha tèid na cosgaisean ùrachadh.

Ceumannan deireannach

Cuir TextWatcher ris (#16):

Prìomh ghnìomhachd clas: AppCompatActivity(), View.OnClickListener, TextWatcher {

An uairsin chuir sinn a-steach an neach-èisteachd billEditText (#17):

billEditText.addTextChangedListener(seo)

A bharrachd air an sin cuiridh sinn còd gus TextWatcher a chuir an gnìomh (#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) {}

A 'cruthachadh àireamhair tip ann an Kotlin: ciamar a tha e ag obair?

Uill, a-nis tha a h-uile dad ag obair! Mealaibh ur naidheachd, tha thu air an “Tip Calculator” agad fhèin a sgrìobhadh ann an Kotlin.

A 'cruthachadh àireamhair tip ann an Kotlin: ciamar a tha e ag obair?

Tha Skillbox a’ moladh:

Source: www.habr.com

Cuir beachd ann