Kuunda kikokotoo cha ncha huko Kotlin: inafanya kazije?

Kuunda kikokotoo cha ncha huko Kotlin: inafanya kazije?

Tunakuonyesha jinsi ya kuunda programu rahisi ya kuhesabu vidokezo huko Kotlin. Ili kuwa sahihi zaidi, Kotlin 1.3.21, Android 4, Android Studio 3. Makala itakuwa ya kuvutia, kwanza kabisa, kwa wale wanaoanza safari yao katika kuendeleza programu za Android. Inakuruhusu kuelewa ni nini na jinsi inavyofanya kazi ndani ya programu.

Calculator vile ni muhimu wakati unahitaji kuhesabu kiasi cha vidokezo kutoka kwa kampuni inayoamua kutumia muda katika mgahawa au cafe. Kwa kweli, sio kila mtu na sio kila wakati huacha chai kwa wahudumu, hii ni zaidi ya mila ya Magharibi, lakini mchakato wa kukuza programu kama hiyo ni ya kuvutia kwa hali yoyote.

Tunakukumbusha: kwa wasomaji wote wa "Habr" - punguzo la rubles 10 wakati wa kujiandikisha katika kozi yoyote ya Skillbox kwa kutumia msimbo wa uendelezaji wa "Habr".

Skillbox inapendekeza: Kozi ya vitendo "Pro ya Msanidi Programu wa Simu.

Hivi ndivyo programu inavyoonekana wakati inaendeshwa:

Kuunda kikokotoo cha ncha huko Kotlin: inafanya kazije?

Unaingiza asilimia inayotakiwa ya jumla ya kiasi, idadi ya washiriki katika mkutano na kupata matokeo - kiasi cha vidokezo vinavyopaswa kuachwa.

Kuanza

Kiolesura kamili cha programu inaonekana kama hii:
Kuunda kikokotoo cha ncha huko Kotlin: inafanya kazije?

Kuunda kikokotoo cha ncha huko Kotlin: inafanya kazije?

Hatua ya kwanza - upakuaji wa msingi wa mradi. Ifungue katika Android Studio 3.0 au matoleo mapya zaidi. Tunaunda na kuendesha mradi na kuona skrini nyeupe. Kila kitu ni sawa, kama inavyopaswa kuwa.

Kuunda kikokotoo cha ncha huko Kotlin: inafanya kazije?

Kuunda kikokotoo cha ncha huko Kotlin: inafanya kazije?

Vitendo vya mtumiaji vimeandikwa katika mradi kwa mpangilio wa wakati, ili kila kitu kiwe wazi. Ili kuiona, fungua Tazama -> Zana ya Windows -> TODO.

Tunasoma mradi na kufungua rangi.xml ili kutathmini ubao wa rangi. strings.xml ina data ya maandishi (manukuu), na styles.xml ina violezo kadhaa vya fonti.

Maendeleo ya Sehemu ya Gharama

Fungua shughuli_main.xml na uongeze msimbo ulio hapa chini kwenye 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"/>

Sasa unaweza kutengeneza saraka ya maadili au kucheza na rangi ukitumia nyenzo.io chombo.

Sasa mradi unaonekana kama hii:

Kuunda kikokotoo cha ncha huko Kotlin: inafanya kazije?
Kama unavyoona, hesabu ya gharama inategemea data iliyoingizwa na mtumiaji.

Maendeleo ya sehemu ya akaunti

Ongeza nambari iliyo hapa chini kwa LinearLayout baada ya Sehemu ya Gharama (#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>

Funga LinearLayout baada ya orodha ya TODO, kisha uongeze nambari mpya, ukiiweka ndani ya 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"/>

Kwa kuwa kazi kuu ya programu ni kukokotoa gharama binafsi kwa kila mmoja wa washiriki katika mikusanyiko katika mgahawa, costPerPersonTextView ina jukumu kuu.

EditText inaweka mipaka kwenye mstari mmoja, kigezo hiki lazima kiwekwe kuwa NumberDecimal inputType.

Kuunda kikokotoo cha ncha huko Kotlin: inafanya kazije?
Tunaanza mradi wa mtihani na kuingiza vigezo vya uharibifu wa jumla (vikombe vilivyovunjika, sahani, nk).

Maendeleo ya sehemu ya "Watu na Vidokezo".

Ili kuongeza kichaguzi cha kiasi cha kidokezo, bandika msimbo ulio hapa chini kwenye sehemu mpya ya 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>

Sehemu hii ya msimbo inahitajika ili kuhesabu kwa usahihi kiasi cha kidokezo. Thamani ya maandishi chaguo-msingi ni 20. ImageButtons hutolewa na ikoni kwenye folda iliyo na ruhusa ya kuandika.

Nakili sehemu nzima na uongeze zifuatazo (#5):

  • Vitambulisho vyaKitufe cha Picha (ondoaKitufe cha watu, ongezaKitufe cha watu)
  • Vitambulisho vya Mwonekano wa Maandishi (numberOfPeopleStaticText, numberOfPeopleTextView)
  • Maandishi Chaguomsingi ya numberOfPeopleTextView (inapaswa kuwa 4).

Kuunda kikokotoo cha ncha huko Kotlin: inafanya kazije?

Sasa, wakati wa kuanza programu, inawezekana kuongeza kiasi cha ankara, vifungo vya Ongeza / Ondoa pia hufanya kazi, lakini hadi sasa hakuna kinachotokea.

Ongeza Maoni

Fungua MainActivity.kt na uongeze hii kwenye kitendakazi cha 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
 
}

Kumaliza vifungo

Ili kuongeza usaidizi wa kubofya vitufe, tumia View.OnClickListener katika kiwango cha darasa (#7):

class Shughuli kuu: AppCompatActivity(), View.OnClickListener {

Kukusanya mradi hivi sasa haitafanya kazi, unahitaji kufanya hatua chache zaidi (# 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()
        }
    }

Kwa upande wa vifungo na swichi, Kotlin ina kila kitu kilichopangwa vizuri sana! Ongeza nambari iliyo hapa chini kwa kazi zote za kuongeza na kupunguza
(#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()
        }
    }

Hapa msimbo hulinda vitendaji vya nyongeza na viwango vya juu zaidi (MAX_TIP & MAX_PEOPLE). Kwa kuongezea, msimbo hulinda vitendakazi vya kupunguza na viwango vya chini zaidi (MIN_TIP & MIN_PEOPLE).

Sasa tunafunga vifungo kwa wasikilizaji kwenye kitendakazi cha initViews (#13):

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

Kuunda kikokotoo cha ncha huko Kotlin: inafanya kazije?

Sasa unaweza kuongeza jumla ya uharibifu, vidokezo na idadi ya washiriki wa mkutano. Kweli, sasa jambo muhimu zaidi ...

Sehemu ya gharama

Msimbo huu unakokotoa gharama (#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)
 
}

Kweli, hapa kazi inaitwa ambayo inafanya uwezekano wa kuzingatia idadi ya watu kwenye kampuni na kuhesabu kidokezo (#15):

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

Tunazindua programu. Inaonekana na inafanya kazi vizuri. Lakini inaweza kuwa bora zaidi.

Ukijaribu kuondoa kiasi cha bili na kisha kuongeza idadi ya vidokezo au marafiki, programu itaacha kufanya kazi kwa sababu bado hakuna hundi ya gharama sifuri. Zaidi ya hayo, ukijaribu kubadilisha kiasi cha ankara, gharama hazitasasishwa.

Hatua za mwisho

Ongeza TextWatcher (#16):

class Shughuli kuu: AppCompatActivity(), View.OnClickListener, TextWatcher {

Kisha tunapachika msikilizaji wa BillEditText (#17):

billEditText.addTextChangedListener(hii)

Pia ongeza nambari ya kutekeleza 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) {}

Kuunda kikokotoo cha ncha huko Kotlin: inafanya kazije?

Naam, sasa kila kitu kinafanya kazi! Hongera, umeandika "Tipping Calculator" yako mwenyewe huko Kotlin.

Kuunda kikokotoo cha ncha huko Kotlin: inafanya kazije?

Skillbox inapendekeza:

Chanzo: mapenzi.com

Kuongeza maoni