Að búa til þjórféreiknivél í Kotlin: hvernig virkar það?

Að búa til þjórféreiknivél í Kotlin: hvernig virkar það?

Við segjum þér hvernig á að búa til einfalt forrit til að reikna ráð í Kotlin. Nánar tiltekið, Kotlin 1.3.21, Android 4, Android Studio 3. Greinin verður fyrst og fremst áhugaverð fyrir þá sem eru að hefja ferð sína í þróun Android forrita. Það gerir þér kleift að skilja hvað og hvernig það virkar inni í forritinu.

Þessi reiknivél kemur sér vel þegar þú þarft að reikna út magn ábendinga frá fyrirtæki sem ákveður að eyða tíma á veitingastað eða kaffihúsi. Auðvitað skilja ekki allir alltaf eftir þjórfé til þjónanna, þetta er frekar vestræn hefð, en ferlið við að þróa slíkt forrit er áhugavert í öllum tilvikum.

Við minnum á: fyrir alla Habr lesendur - 10 rúblur afsláttur þegar þú skráir þig á hvaða Skillbox námskeið sem er með því að nota Habr kynningarkóðann.

Skillbox mælir með: Verklegt námskeið „Farsímaframleiðandi PRO.

Svona lítur forritið út í rekstri:

Að búa til þjórféreiknivél í Kotlin: hvernig virkar það?

Þú slærð inn æskilega prósentu af heildarupphæðinni, fjölda fundarþátttakenda og færð niðurstöðuna - magn þjórfé sem þú ættir að skilja eftir.

Hafist handa

Allt forritsviðmótið lítur svona út:
Að búa til þjórféreiknivél í Kotlin: hvernig virkar það?

Að búa til þjórféreiknivél í Kotlin: hvernig virkar það?

Fyrsta aðgerð - að hlaða niður verkefnagrunninum. Opnaðu það í Android Studio 3.0 eða nýrri. Við smíðum og ræsum verkefnið og sjáum hvítan skjá. Allt er í lagi, þannig á það að vera.

Að búa til þjórféreiknivél í Kotlin: hvernig virkar það?

Að búa til þjórféreiknivél í Kotlin: hvernig virkar það?

Notendaaðgerðir eru skrifaðar í verkefnið í tímaröð til að gera allt skýrt. Til að skoða það skaltu opna View -> Tool Windows -> TODO.

Við skoðum verkefnið og opnum colors.xml til að meta litaspjaldið. strings.xml inniheldur textagögn (undirskriftir) og styles.xml inniheldur nokkur letursniðmát.

Þróun kostnaðarhluta

Opnaðu activity_main.xml og bættu kóðanum hér að neðan við 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"/>

Nú geturðu stílað gildisskrána eða leikið þér með liti með því að nota material.io tól.

Nú lítur verkefnið svona út:

Að búa til þjórféreiknivél í Kotlin: hvernig virkar það?
Eins og þú sérð er kostnaður reiknaður út frá þeim gögnum sem notandinn slær inn.

Þróun bókhaldshluta

Bættu kóðanum hér að neðan við línulegt útlit eftir kostnaðarhlutann (#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>

Við lokum LinearLayout eftir listann yfir TODOs og bætum svo við nýjum kóða, setjum hann inn í 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"/>

Þar sem aðalverkefni forritsins er að reikna út einstaklingskostnað fyrir hvern þátttakanda í veitingasamkomu, gegnir costPerPersonTextView aðalhlutverkinu.

EditText takmarkar inntakið við eina línu, þessi færibreyta verður að vera stillt á NumberDecimal inputType.

Að búa til þjórféreiknivél í Kotlin: hvernig virkar það?
Við ræsum verkefnið fyrir prófið og sláum inn færibreytur fyrir almennar skemmdir (brotnir bollar, diskar osfrv.)

Þróun hlutans „Fólk og ráð“

Til að bæta við vali á þjórfé skaltu líma kóðann hér að neðan í nýja LinearLayout hlutann (#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>

Þessi hluti kóða er nauðsynlegur til að reikna nákvæmlega út magn þjórfé. Sjálfgefið textagildi er 20. ImageButtons eru með táknum í möppu með skrifheimildir.

Afritaðu hlutann alveg og bættu við eftirfarandi (#5):

  • ImageButton auðkenni (draga frá PeopleButton, addPeopleButton)
  • TextView id(numberOfPeopleStaticText, numberOfPeopleTextView)
  • DefaultText fyrir numberOfPeopleTextView (verður að vera 4).

Að búa til þjórféreiknivél í Kotlin: hvernig virkar það?

Nú, þegar þú ræsir forritið, þá er tækifæri til að bæta við reikningsupphæðinni, „Bæta við/Dregna frá“ hnapparnir virka líka, en ekkert gerist ennþá.

Bætir við útsýni

Opnaðu MainActivity.kt og bættu þessu við initViews aðgerðina (#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ð klára hnappana

Til að bæta við stuðningi við smelli á hnappa innleiðum við View.OnClickListener á bekkjarstigi (#7):

class MainActivity: AppCompatActivity(), View.OnClickListener {

Það verður ekki hægt að setja saman verkefnið núna; þú þarft að framkvæma nokkur skref í viðbót (#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()
        }
    }

Hvað varðar hnappa og rofa, þá skipuleggur Kotlin allt mjög flott! Bættu kóðanum hér að neðan við allar aukningar- og lækkunaraðgerðir
(#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()
        }
    }

Hér verndar kóðinn aukningaraðgerðirnar með hámarksgildum (MAX_TIP & MAX_PEOPLE). Að auki verndar kóðinn lækkunaraðgerðirnar með lágmarksgildum (MIN_TIP & MIN_PEOPLE).

Nú tengjum við hnappana við hlustendur í initViews aðgerðinni (#13):

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

Að búa til þjórféreiknivél í Kotlin: hvernig virkar það?

Þú getur nú bætt við heildartjóni, ábendingum og fjölda fundarmanna. Jæja, nú er það mikilvægasta...

Kostnaðarútreikningur hluti

Þessi kóði reiknar út kostnað (#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)
 
}

Jæja, hér er kölluð fall sem gerir það mögulegt að taka tillit til fjölda fólks í fyrirtækinu og reikna út ábendingar (#15):

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

Við skulum ræsa forritið. Það lítur út og virkar frábærlega. En það gæti verið betra.

Ef þú reynir að fjarlægja reikningsupphæðina og fjölgar síðan ábendingum eða vinum, mun forritið hrynja vegna þess að það er ekkert athugað ennþá fyrir núllkostnaðargildið. Þar að auki, ef þú reynir að breyta reikningsupphæðinni, verða gjöldin ekki uppfærð.

Lokaskref

Bæta við TextWatcher (#16):

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

Síðan fellum við inn billEditText hlustandann (#17):

billEditText.addTextChangedListener(þetta)

Auk þess bætum við kóða til að keyra 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) {}

Að búa til þjórféreiknivél í Kotlin: hvernig virkar það?

Jæja, nú virkar algjörlega allt! Til hamingju, þú hefur skrifað þinn eigin „Ábendingareiknivél“ í Kotlin.

Að búa til þjórféreiknivél í Kotlin: hvernig virkar það?

Skillbox mælir með:

Heimild: www.habr.com

Bæta við athugasemd