Bini ta' kalkolatur tal-ponta f'Kotlin: kif jaħdem?

Bini ta' kalkolatur tal-ponta f'Kotlin: kif jaħdem?

Aħna ngħidulek kif toħloq applikazzjoni sempliċi għall-kalkolu tal-pariri f'Kotlin. B'mod aktar preċiż, Kotlin 1.3.21, Android 4, Android Studio 3. L-artikolu se jkun interessanti, l-ewwelnett, għal dawk li qed jibdew il-vjaġġ tagħhom fl-iżvilupp tal-applikazzjoni Android. Jippermettilek tifhem x'u kif taħdem ġewwa l-applikazzjoni.

Dan il-kalkolatur se jkun utli meta jkollok bżonn tikkalkula l-ammont ta 'pariri minn kumpanija li tiddeċiedi li tqatta' ħin f'ristorant jew kafetterija. Naturalment, mhux kulħadd dejjem iħalli ponta lill-wejters din hija aktar tradizzjoni tal-Punent, iżda l-proċess tal-iżvilupp ta 'applikazzjoni bħal din huwa interessanti fi kwalunkwe każ.

Infakkrukom: għall-qarrejja kollha ta '"Habr" - skont ta' 10 rublu meta tirreġistra fi kwalunkwe kors ta 'Skillbox billi tuża l-kodiċi promozzjonali "Habr".

Skillbox jirrakkomanda: Kors prattiku "Żviluppatur mobbli PRO.

Dan huwa kif tidher l-applikazzjoni waqt it-tħaddim:

Bini ta' kalkolatur tal-ponta f'Kotlin: kif jaħdem?

Int iddaħħal il-perċentwal mixtieq tal-ammont totali, in-numru ta 'parteċipanti tal-laqgħa, u tikseb ir-riżultat - l-ammont ta' ponta li għandek tħalli.

Kif tibda

L-interface sħiħa tal-applikazzjoni tidher bħal din:
Bini ta' kalkolatur tal-ponta f'Kotlin: kif jaħdem?

Bini ta' kalkolatur tal-ponta f'Kotlin: kif jaħdem?

L-ewwel azzjoni - tniżżil tal-bażi tal-proġett. Iftaħ f'Android Studio 3.0 jew aktar tard. Nibnu u nniedu l-proġett u naraw skrin abjad. Kollox tajjeb, hekk għandu jkun.

Bini ta' kalkolatur tal-ponta f'Kotlin: kif jaħdem?

Bini ta' kalkolatur tal-ponta f'Kotlin: kif jaħdem?

L-azzjonijiet tal-utent huma miktuba fil-proġett f'ordni kronoloġika biex jagħmlu kollox ċar. Biex tarah, iftaħ View -> Tool Windows -> TODO.

Aħna nistudjaw il-proġett u niftħu colors.xml biex nevalwaw il-paletta tal-kulur. strings.xml fih data tat-test (firem), u styles.xml fih diversi mudelli ta' font.

Żvilupp tat-taqsima tal-ispiża

Iftaħ activity_main.xml u żid il-kodiċi hawn taħt mal-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"/>

Issa tista 'tistilja d-direttorju tal-valuri jew tilgħab bil-kuluri bl-użu għodda material.io.

Issa l-proġett jidher bħal dan:

Bini ta' kalkolatur tal-ponta f'Kotlin: kif jaħdem?
Kif tistgħu taraw, l-ispejjeż huma kkalkulati abbażi tad-dejta mdaħħla mill-utent.

Żvilupp tat-taqsima tal-kontijiet

Żid il-kodiċi hawn taħt mal-LinearLayout wara t-Taqsima tal-Ispejjeż (#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>

Aħna nagħlqu l-LinearLayout wara l-lista ta 'TODOs, u mbagħad żid kodiċi ġdid, poġġih ġewwa l-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"/>

Peress li l-kompitu ewlieni tal-applikazzjoni huwa li tikkalkula l-ispejjeż individwali għal kull parteċipant f'laqgħa ta 'ristorant, costPersonTextView għandu r-rwol ewlieni.

EditText jillimita l-input għal linja waħda, dan il-parametru għandu jkun issettjat għal NumberDecimal inputType.

Bini ta' kalkolatur tal-ponta f'Kotlin: kif jaħdem?
Inniedu l-proġett għat-test u ndaħħlu l-parametri għall-ħsara ġenerali (kikkri miksura, platti, eċċ.)

Żvilupp tat-taqsima “Nies u Tips”.

Biex iżżid għażla tal-volum tal-ponta, waħħal il-kodiċi hawn taħt fis-sezzjoni LinearLayout il-ġdida (#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>

Din it-taqsima tal-kodiċi hija meħtieġa biex tikkalkula b'mod preċiż l-ammont tal-ponta. Il-valur tat-test default huwa 20. ImageButtons huma pprovduti b'ikoni f'folder b'permessi ta 'kitba.

Ikkopja s-sezzjoni kompletament u żid dan li ġej (#5):

  • ImageButton ids (naqqas PeopleButton, addPeopleButton)
  • TextView ids(numruOfPeopleStaticText, numberOfPeopleTextView)
  • DefaultText għal numberOfPeopleTextView (għandu jkun 4).

Bini ta' kalkolatur tal-ponta f'Kotlin: kif jaħdem?

Issa, meta tniedi l-applikazzjoni, hemm opportunità li żżid l-ammont tal-fattura, il-buttuni "Żid/Naqqas" jaħdmu wkoll, iżda għadu ma jiġri xejn.

Żieda tal-Opinjonijiet

Iftaħ MainActivity.kt u żid dan mal-funzjoni 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
 
}

Irfinar tal-buttuni

Biex iżżid l-appoġġ għall-klikks tal-buttuna, nimplimentaw View.OnClickListener fil-livell tal-klassi (#7):

klassi MainActivity: AppCompatActivity (), View.OnClickListener {

Mhux se jkun possibbli li tikkompila l-proġett issa għandek bżonn twettaq ftit passi oħra (#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()
        }
    }

F'termini ta 'buttuni u swiċċijiet, Kotlin jorganizza kollox jibred ħafna! Żid il-kodiċi hawn taħt għall-funzjonijiet kollha ta 'inkrement u tnaqqis
(#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()
        }
    }

Hawnhekk il-kodiċi jipproteġi l-funzjonijiet ta 'inkrement b'valuri massimi (MAX_TIP & MAX_PEOPLE). Barra minn hekk, il-kodiċi jipproteġi l-funzjonijiet ta’ tnaqqis b’valuri minimi (MIN_TIP & MIN_PEOPLE).

Issa aħna nassoċjaw il-buttuni mas-semmiegħa fil-funzjoni initViews (#13):

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

Bini ta' kalkolatur tal-ponta f'Kotlin: kif jaħdem?

Issa tista 'żżid danni totali, tips, u n-numru ta' parteċipanti tal-laqgħa. Ukoll, issa l-iktar ħaġa importanti...

Taqsima tal-kalkolu tal-ispiża

Dan il-kodiċi jikkalkula l-ispejjeż (#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)
 
}

Ukoll, hawnhekk tissejjaħ funzjoni li tagħmilha possibbli li jittieħed kont tan-numru ta 'nies fil-kumpanija u tikkalkula pariri (#15):

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

Ejja nniedu l-applikazzjoni. Jidher u jaħdem tajjeb. Iżda jista 'jkun aħjar.

Jekk tipprova tneħħi l-ammont tal-kont u mbagħad iżżid in-numru ta’ tips jew ħbieb, l-applikazzjoni tiġġarraf għax għad m’hemm l-ebda kontroll għall-valur ta’ spiża żero. Barra minn hekk, jekk tipprova tibdel l-ammont tal-kont, it-tariffi ma jiġux aġġornati.

Passi finali

Żid TextWatcher (#16):

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

Imbagħad inkorporaw is-semmiegħ billEditText (#17):

billEditText.addTextChangedListener(dan)

Barra minn hekk inżidu kodiċi biex tesegwixxi 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) {}

Bini ta' kalkolatur tal-ponta f'Kotlin: kif jaħdem?

Ukoll, issa assolutament kollox jaħdem! Prosit, inti ktibt il-"Kalkolatur tat-Tip" tiegħek f'Kotlin.

Bini ta' kalkolatur tal-ponta f'Kotlin: kif jaħdem?

Skillbox jirrakkomanda:

Sors: www.habr.com

Żid kumment