Gina kalkuleta na tukwici a Kotlin: yaya yake aiki?

Gina kalkuleta na tukwici a Kotlin: yaya yake aiki?

Muna nuna muku yadda ake ƙirƙirar aikace-aikacen ƙididdiga mai sauƙi a cikin Kotlin. Don zama daidai, Kotlin 1.3.21, Android 4, Android Studio 3. Labarin zai zama mai ban sha'awa, da farko, ga waɗanda suka fara tafiya a cikin haɓaka aikace-aikacen Android. Yana ba ku damar fahimtar abin da kuma yadda yake aiki a cikin aikace-aikacen.

Irin wannan kalkuleta yana da amfani lokacin da kake buƙatar ƙididdige adadin shawarwari daga kamfani wanda ya yanke shawarar ciyar da lokaci a gidan abinci ko cafe. Tabbas, ba kowa ba ne kuma ba koyaushe yana barin shayi ga masu jira ba, wannan shine mafi al'adar Yammacin Turai, amma tsarin haɓaka irin wannan aikace-aikacen yana da ban sha'awa a kowane hali.

Muna tunatarwa: ga duk masu karatu na "Habr" - rangwame na 10 rubles lokacin yin rajista a kowane kwas na Skillbox ta amfani da lambar talla "Habr".

Skillbox yana ba da shawarar: Hakikanin hanya "Mobile Developer PRO.

Ga yadda app ɗin ke gudana lokacin da yake gudana:

Gina kalkuleta na tukwici a Kotlin: yaya yake aiki?

Kuna shigar da adadin da ake so na jimlar adadin, adadin mahalarta taron kuma ku sami sakamakon - adadin shawarwarin da ya kamata a bar.

Farawa

Cikakkun aikace-aikacen yana kama da haka:
Gina kalkuleta na tukwici a Kotlin: yaya yake aiki?

Gina kalkuleta na tukwici a Kotlin: yaya yake aiki?

Mataki na farko - aikin tushe download. Bude shi a cikin Android Studio 3.0 ko kuma daga baya. Muna ginawa da gudanar da aikin kuma muna ganin farin allo. Komai yana da kyau, kamar yadda ya kamata.

Gina kalkuleta na tukwici a Kotlin: yaya yake aiki?

Gina kalkuleta na tukwici a Kotlin: yaya yake aiki?

Ayyukan mai amfani an rubuta su a cikin aikin a cikin tsari na lokaci-lokaci, domin komai ya bayyana. Don duba shi, buɗe Duba -> Kayan aiki Windows -> TODO.

Muna nazarin aikin kuma muna buɗe launuka.xml don kimanta palette mai launi. strings.xml ya ƙunshi bayanan rubutu (captions), kuma styles.xml ya ƙunshi samfuran rubutu da yawa.

Ci gaban Sashe na Farashin

Bude aiki_main.xml kuma ƙara lambar da ke ƙasa zuwa layin layi (#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"/>

Yanzu zaku iya salon kundin darajoji ko wasa tare da launuka ta amfani da material.io kayan aiki.

Yanzu aikin yayi kama da haka:

Gina kalkuleta na tukwici a Kotlin: yaya yake aiki?
Kamar yadda kake gani, lissafin farashi yana dogara ne akan bayanan da mai amfani ya shigar.

Ci gaban sashin asusun

Ƙara lambar da ke ƙasa zuwa LinearLayout bayan Sashe na Kuɗi (#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>

Rufe LinearLayout bayan jerin TODOs, sannan ƙara sabon lambar, sanya shi cikin layin layi (#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"/>

Tunda babban aikin aikace-aikacen shine ƙididdige farashin mutum ɗaya ga kowane mahalarta a cikin taron a gidan abinci, farashiPersonTextView yana taka muhimmiyar rawa.

EditText yana iyakance shigarwa zuwa layi ɗaya, dole ne a saita wannan siga zuwa shigarwar NumberDecimalType.

Gina kalkuleta na tukwici a Kotlin: yaya yake aiki?
Mun fara aikin don gwajin kuma shigar da sigogi na jimlar lalacewa (kofuna waɗanda suka karye, faranti, da sauransu)

Ci gaban sashen "Mutane da Nasiha".

Don ƙara mai zaɓin adadin tukwici, liƙa lambar da ke ƙasa cikin sabon sashin layi na layi (#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>

Ana buƙatar wannan yanki na lambar don ƙididdige adadin adadin daidai. Ƙimar rubutun tsoho ita ce 20. ImageButtons ana ba da gumaka a cikin babban fayil tare da izini na rubuta.

Kwafi dukkan sashin kuma ƙara mai zuwa (#5):

  • ImageButton ids (sakewa Button Button, addPeopleButton)
  • TextView ids (lambarOfPeopleStaticText, lambaOfPeopleTextView)
  • TsoffinText na lambaOfPeopleTextView (ya zama 4).

Gina kalkuleta na tukwici a Kotlin: yaya yake aiki?

Yanzu, lokacin fara aikace-aikacen, yana yiwuwa a ƙara adadin daftari, maɓallan Ƙara / Rage ma suna aiki, amma har yanzu babu abin da ya faru.

Ƙara Ra'ayoyi

Bude MainActivity.kt kuma ƙara wannan zuwa aikin 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
 
}

Ƙare maɓallan

Don ƙara tallafi don danna maballin, aiwatar da View.OnClickListener a matakin aji (#7):

Babban Ayyukan aji: AppCompatActivity(), View.OnClickListener {

Haɗa aikin a yanzu ba zai yi aiki ba, kuna buƙatar yin wasu ƙarin matakai (# 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()
        }
    }

Dangane da maɓalli da maɓalli, Kotlin yana da komai da aka tsara sosai! Ƙara lambar da ke ƙasa zuwa duk ayyukan haɓakawa da raguwa
(#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()
        }
    }

Anan lambar tana kare ayyukan haɓaka tare da mafi girman ƙima (MAX_TIP & MAX_PEOPLE). Bugu da kari, lambar tana kare ayyukan ragewa tare da mafi ƙarancin ƙima (MIN_TIP & MIN_PEOPLE).

Yanzu muna ɗaure maɓallan ga masu sauraro a cikin aikin initViews (#13):

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

Gina kalkuleta na tukwici a Kotlin: yaya yake aiki?

Yanzu zaku iya ƙara jimillar lalacewa, tukwici, da adadin mahalarta taron. To, yanzu abu mafi mahimmanci ...

Sashin farashi

Wannan lambar tana ƙididdige farashi (#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)
 
}

To, a nan ana kiran wani aiki wanda zai ba da damar yin la'akari da adadin mutanen da ke cikin kamfanin kuma a lissafta tip (#15):

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

Mun kaddamar da aikace-aikacen. Yana kama da aiki mai girma. Amma zai iya zama mafi kyau.

Idan kuka yi ƙoƙarin cire adadin kuɗin sannan ku ƙara yawan alamu ko abokai, app ɗin zai faɗo saboda babu rajistan farashin sifili tukuna. Bugu da ƙari, idan kuna ƙoƙarin canza adadin daftari, ba za a sabunta cajin ba.

Matakai na ƙarshe

Ƙara TextWatcher (#16):

Babban Ayyukan aji: AppCompatActivity(), View.OnClickListener, TextWatcher {

Sannan mun shigar da mai sauraron BillEditText (#17):

billEditText.addTextChangedListener(wannan)

Ƙara lamba don aiwatar da 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) {}

Gina kalkuleta na tukwici a Kotlin: yaya yake aiki?

To, yanzu komai yana aiki! Taya murna, kun rubuta naku "Kalakuleta Tipping" a cikin Kotlin.

Gina kalkuleta na tukwici a Kotlin: yaya yake aiki?

Skillbox yana ba da shawarar:

source: www.habr.com

Add a comment