Ukwakha i-tip calculator e-Kotlin: isebenza kanjani?

Ukwakha i-tip calculator e-Kotlin: isebenza kanjani?

Sikukhombisa ukuthi ulwakha kanjani uhlelo lokusebenza lokubala lwethiphu olulula e-Kotlin. Ukuze ucacise kabanzi, i-Kotlin 1.3.21, i-Android 4, i-Android Studio 3. Isihloko sizothakazelisa, okokuqala, kulabo abaqala uhambo lwabo ekuthuthukiseni izinhlelo zokusebenza ze-Android. Ikuvumela ukuthi uqonde ukuthi yini nokuthi isebenza kanjani ngaphakathi kohlelo lokusebenza.

I-calculator enjalo iyasiza uma udinga ukubala inani lamathiphu avela enkampanini enquma ukuchitha isikhathi endaweni yokudlela noma e-cafe. Yiqiniso, akuwona wonke umuntu futhi akashiyi itiye njalo kubalindi, lokhu kungokwesiko laseNtshonalanga, kodwa inqubo yokuthuthukisa isicelo esinjalo iyathakazelisa kunoma yikuphi.

Siyakukhumbuza: kubo bonke abafundi be-"Habr" - isaphulelo sama-ruble angu-10 lapho ubhalisa kunoma yisiphi isifundo se-Skillbox usebenzisa ikhodi yephromoshini ethi "Habr".

I-Skillbox iyancoma: Isifundo esiwusizo "I-Mobile Developer PRO.

Nakhu ukuthi uhlelo lokusebenza lubukeka kanjani uma lusebenza:

Ukwakha i-tip calculator e-Kotlin: isebenza kanjani?

Ufaka iphesenti oyifunayo yenani eliphelele, inani labahlanganyeli emhlanganweni futhi uthole umphumela - inani lamathiphu okufanele ashiywe.

Ukuqalisa

Ukuxhumana okugcwele kohlelo lokusebenza kubukeka kanje:
Ukwakha i-tip calculator e-Kotlin: isebenza kanjani?

Ukwakha i-tip calculator e-Kotlin: isebenza kanjani?

Isenzo sokuqala - ukulanda kwesisekelo sephrojekthi. Ivule ku-Android Studio 3.0 noma eyakamuva. Sakha futhi siqhube iphrojekthi futhi sibone isikrini esimhlophe. Konke kuhamba kahle, njengoba kufanele kube njalo.

Ukwakha i-tip calculator e-Kotlin: isebenza kanjani?

Ukwakha i-tip calculator e-Kotlin: isebenza kanjani?

Izenzo zabasebenzisi zibhalwa kuphrojekthi ngokulandelana kwezikhathi, ukuze yonke into icace. Ukuze uyibuke, vula okuthi Buka -> Ithuluzi leWindows -> TODO.

Sitadisha iphrojekthi bese sivula imibala.xml ukuze sihlole iphalethi yombala. strings.xml iqukethe idatha yombhalo (amagama-ncazo), kanye nezitayela.xml iqukethe izifanekiso zefonti ezimbalwa.

Ukuthuthukiswa Kwesigaba Sezindleko

Vula umsebenzi_main.xml bese wengeza ikhodi engezansi ku-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"/>

Manje usungabhala uhlu lwamanani noma udlale ngemibala usebenzisa ithuluzi lempahla.io.

Manje iphrojekthi ibukeka kanje:

Ukwakha i-tip calculator e-Kotlin: isebenza kanjani?
Njengoba ubona, ukubalwa kwezindleko kusekelwe kudatha efakwe umsebenzisi.

Ukuthuthukiswa kwesigaba se-akhawunti

Engeza ikhodi engezansi ku-LinearLayout ngemva Kwesigaba Sezindleko (#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>

Vala i-LinearLayout ngemva kohlu lwe-TODO, bese wengeza ikhodi entsha, uyibeke ngaphakathi kwe-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"/>

Njengoba umsebenzi oyinhloko wohlelo lokusebenza ukubala izindleko zomuntu ngamunye wabahlanganyeli embuthanweni endaweni yokudlela, i-costPerPersonTextView idlala indima enkulu.

Hlela umbhalo ofaka imikhawulo emugqeni owodwa, le pharamitha kufanele isethelwe ku-NumberDecimal inputType.

Ukwakha i-tip calculator e-Kotlin: isebenza kanjani?
Siqala iphrojekthi yokuhlolwa bese sifaka imingcele yomonakalo ophelele (izinkomishi eziphukile, amapuleti, njll.)

Ukuthuthukiswa kwesigaba "Abantu Namathiphu".

Ukwengeza isikhethi senani lethiphu, namathisela ikhodi engezansi esigabeni esisha se-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>

Lolu cezu lwekhodi luyadingeka ukuze kubalwe ngokunembile inani lethiphu. Inani lombhalo elizenzakalelayo lingu-20. Ama-ImageButton anikezwa izithonjana kufolda enezimvume zokubhala.

Kopisha sonke isigaba bese wengeza okulandelayo (#5):

  • I-ImageButton id (susaInkinobho Yabantu, engezaInkinobho Yabantu)
  • I-TextView ID (inomboloOfPeopleStaticText, numberOfPeopleTextView)
  • OkuzenzakalelayoUmbhalo wenomboloOfPeopleTextView (kufanele kube ngu-4).

Ukwakha i-tip calculator e-Kotlin: isebenza kanjani?

Manje, lapho uqala uhlelo lokusebenza, kungenzeka ukwengeza inani le-invoyisi, izinkinobho zokungeza / Susa nazo ziyasebenza, kodwa kuze kube manje akukho okwenzekayo.

Engeza Ukubuka

Vula i-MainActivity.kt bese wengeza lokhu kumsebenzi we-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
 
}

Eqeda izinkinobho

Ukuze ungeze usekelo lokuchofoza izinkinobho, sebenzisa okuthi View.OnClickListener ezingeni lekilasi (#7):

class MainActivity: AppCompatActivity(), View.OnClickListener {

Ukuhlanganisa iphrojekthi njengamanje ngeke kusebenze, udinga ukwenza ezinye izinyathelo ezimbalwa (# 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()
        }
    }

Mayelana nezinkinobho nokushintsha, i-Kotlin inakho konke okuhlelwe kahle kakhulu! Engeza ikhodi engezansi kuyo yonke imisebenzi yokwengeza nokwehlisa
(#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()
        }
    }

Lapha ikhodi ivikela imisebenzi yokukhuphuka ngamavelu aphezulu (MAX_TIP & MAX_PEOPLE). Ngaphezu kwalokho, ikhodi ivikela imisebenzi yokwehlisa ngamanani amancane (MIN_TIP & MIN_PEOPLE).

Manje sibopha izinkinobho kubalaleli kumsebenzi we-initViews (#13):

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

Ukwakha i-tip calculator e-Kotlin: isebenza kanjani?

Manje ungangeza umonakalo ophelele, amathiphu, nenombolo yabahlanganyeli bomhlangano. Manje, into ebaluleke kakhulu ...

Isigaba sezindleko

Le khodi ibala izindleko (#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)
 
}

Hhayi-ke, lapha kubizwa umsebenzi owenza kube nokwenzeka ukucabangela inani labantu enkampanini futhi ubale ithiphu (#15):

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

Sethula uhlelo lokusebenza. Ibukeka futhi isebenza kahle. Kodwa kungaba ngcono.

Uma uzama ukususa inani lebhili bese ukhuphula inani lamacebo noma abangani, uhlelo lokusebenza luzophahlazeka ngoba alikho isheke lezindleko eziziro okwamanje. Ngaphezu kwalokho, uma uzama ukushintsha inani le-invoyisi, izindleko ngeke zibuyekezwe.

Izinyathelo zokugcina

Engeza i-TextWatcher (#16):

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

Bese sishumeka umlaleli we-billEditText (#17):

billEditText.addTextChangedListener(lokhu)

Futhi engeza ikhodi ukuze usebenzise i-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) {}

Ukwakha i-tip calculator e-Kotlin: isebenza kanjani?

Yebo, manje konke kuyasebenza! Siyakuhalalisela, ubhale eyakho i-"Tipping Calculator" e-Kotlin.

Ukwakha i-tip calculator e-Kotlin: isebenza kanjani?

I-Skillbox iyancoma:

Source: www.habr.com

Engeza amazwana