Kupanga chowerengera chowerengera ku Kotlin: chimagwira ntchito bwanji?

Kupanga chowerengera chowerengera ku Kotlin: chimagwira ntchito bwanji?

Tikukuuzani momwe mungapangire pulogalamu yosavuta yowerengera malangizo ku Kotlin. Zowonjezereka, Kotlin 1.3.21, Android 4, Android Studio 3. Nkhaniyi idzakhala yosangalatsa, choyamba, kwa iwo omwe akuyamba ulendo wawo mu chitukuko cha mapulogalamu a Android. Zimakuthandizani kumvetsetsa zomwe ndi momwe zimagwirira ntchito mkati mwa pulogalamuyi.

Chowerengera ichi chidzakuthandizani mukafunika kuwerengera kuchuluka kwa maupangiri kuchokera ku kampani yomwe yasankha kuthera nthawi mu lesitilanti kapena cafe. Zachidziwikire, si aliyense amene amasiya nsonga kwa odikira; izi ndi miyambo yaku Western, koma njira yopangira izi ndi yosangalatsa mulimonse.

Tikukukumbutsani: kwa owerenga onse a Habr - kuchotsera ma ruble 10 polembetsa maphunziro aliwonse a Skillbox pogwiritsa ntchito nambala yotsatsira ya Habr.

Skillbox imalimbikitsa: Njira yothandiza "Wopanga mafoni PRO.

Umu ndi momwe pulogalamuyi imawonekera ikugwira ntchito:

Kupanga chowerengera chowerengera ku Kotlin: chimagwira ntchito bwanji?

Mumalowetsa kuchuluka kwa ndalama zonse, kuchuluka kwa omwe atenga nawo gawo, ndikupeza zotsatira - kuchuluka kwa nsonga yomwe muyenera kusiya.

Kuyamba

Mawonekedwe athunthu ogwiritsira ntchito amawoneka motere:
Kupanga chowerengera chowerengera ku Kotlin: chimagwira ntchito bwanji?

Kupanga chowerengera chowerengera ku Kotlin: chimagwira ntchito bwanji?

Chochita choyamba - kutsitsa maziko a polojekiti. Tsegulani mu Android Studio 3.0 kapena mtsogolo. Timamanga ndikuyambitsa polojekitiyi ndikuwona chophimba choyera. Zonse zili bwino, ndi momwe ziyenera kukhalira.

Kupanga chowerengera chowerengera ku Kotlin: chimagwira ntchito bwanji?

Kupanga chowerengera chowerengera ku Kotlin: chimagwira ntchito bwanji?

Zochita za ogwiritsa ntchito zimalembedwa mu projekitiyo motsatira nthawi kuti zonse zimveke bwino. Kuti muwone, tsegulani View -> Chida Windows -> TODO.

Timaphunzira polojekiti ndikutsegula mitundu.xml kuti tiwunikire utoto. strings.xml ili ndi zolemba (ma signature), ndipo styles.xml ili ndi ma template angapo.

Kukula kwa gawo la mtengo

Tsegulani activity_main.xml ndikuwonjezera khodi ili pansipa 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"/>

Tsopano mutha kusanja zolemba zamakhalidwe kapena kusewera ndi mitundu pogwiritsa ntchito chida.io.

Tsopano polojekitiyi ikuwoneka motere:

Kupanga chowerengera chowerengera ku Kotlin: chimagwira ntchito bwanji?
Monga mukuwonera, ndalama zimawerengedwa kutengera zomwe wogwiritsa ntchito adalowa.

Kupanga gawo la akaunti

Onjezani nambala yomwe ili pansipa ku LinearLayout pambuyo pa Gawo la Ndalama (#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>

Timatseka LinearLayout pambuyo pa mndandanda wa TODOs, ndikuwonjezera nambala yatsopano, ndikuyiyika mkati mwa 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"/>

Popeza ntchito yayikulu ya pulogalamuyi ndikuwerengera mtengo wamunthu aliyense pagulu lazakudya, costPerPersonTextView imasewera gawo lalikulu.

EditText imachepetsa zolowetsa ku mzere umodzi, gawoli liyenera kukhazikitsidwa kukhala NumberDecimal inputType.

Kupanga chowerengera chowerengera ku Kotlin: chimagwira ntchito bwanji?
Timakhazikitsa pulojekiti yoyeserera ndikuyika magawo azowonongeka (makapu osweka, mbale, ndi zina).

Kupititsa patsogolo gawo la "Anthu ndi Malangizo".

Kuti muwonjezere voliyumu yosankha, ikani kachidindo pansipa mugawo latsopano la 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>

Gawo ili la code ndilofunika kuti muwerenge molondola kuchuluka kwa nsonga. Mtengo wokhazikika wa mawu ndi 20. ImageButtons amaperekedwa ndi zithunzi mufoda yokhala ndi zilolezo zolembera.

Koperani gawolo kwathunthu ndikuwonjezera zotsatirazi (#5):

  • ImageButton ID (chotsaniPeopleButton, addPeopleButton)
  • Ma ID a TextView(nambalaOfPeopleStaticText, numberOfPeopleTextView)
  • Mawu Osasinthika a numberOfPeopleTextView (ayenera kukhala 4).

Kupanga chowerengera chowerengera ku Kotlin: chimagwira ntchito bwanji?

Tsopano, mukayambitsa pulogalamuyo, pali mwayi wowonjezera invoice, mabatani a "Add/Subtract" amagwiranso ntchito, koma palibe chomwe chimachitika.

Kuwonjezera Mawonedwe

Tsegulani MainActivity.kt ndikuwonjezera izi ku initViews ntchito (#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 mabatani

Kuti muwonjezere chithandizo pakudina mabatani, timayika View.OnClickListener pamlingo wakalasi (#7):

kalasi MainActivity: AppCompatActivity(), View.OnClickListener {

Sizingatheke kuphatikizira pulojekitiyi pakali pano; muyenera kuchitanso masitepe angapo (#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()
        }
    }

Pankhani ya mabatani ndi masinthidwe, Kotlin amakonza zonse zabwino kwambiri! Onjezani nambala yomwe ili pansipa pazowonjezera zonse ndi zochepetsera
(#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()
        }
    }

Apa khodiyo imateteza ntchito zowonjezera zomwe zili ndimtengo wapatali (MAX_TIP & MAX_PEOPLE). Kuphatikiza apo, nambalayi imateteza magwiridwe antchito ndi zikhalidwe zochepa (MIN_TIP & MIN_PEOPLE).

Tsopano timayanjanitsa mabataniwo ndi omvera mu initViews ntchito (#13):

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

Kupanga chowerengera chowerengera ku Kotlin: chimagwira ntchito bwanji?

Tsopano mutha kuwonjezera zowonongeka, maupangiri, ndi kuchuluka kwa omwe atenga nawo mbali pamisonkhano. Chabwino, tsopano chinthu chofunikira kwambiri ...

Gawo lowerengera mtengo

Khodi iyi imawerengera mtengo (#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)
 
}

Chabwino, apa ntchito imatchedwa yomwe imapangitsa kuti zitheke kuganizira kuchuluka kwa anthu pakampani ndikuwerengera malangizo (#15):

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

Tiyeni tiyambitse pulogalamuyi. Zikuwoneka komanso zimagwira ntchito bwino. Koma zingakhale bwinoko.

Mukayesa kuchotsa ndalamazo ndikuwonjezera maupangiri kapena abwenzi, pulogalamuyi idzagwa chifukwa palibe cheke pamtengo wa ziro. Komanso, ngati mutayesa kusintha ndalamazo, zolipiritsa sizidzasinthidwa.

Masitepe omaliza

Onjezani TextWatcher (#16):

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

Kenako timayika omvera a BillEditText (#17):

billEditText.addTextChangedListener(izi)

Komanso timawonjezera nambala kuti tigwiritse ntchito 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) {}

Kupanga chowerengera chowerengera ku Kotlin: chimagwira ntchito bwanji?

Chabwino, tsopano zonse mwamtheradi ntchito! Zabwino kwambiri, mwalemba "Tip Calculator" yanu ku Kotlin.

Kupanga chowerengera chowerengera ku Kotlin: chimagwira ntchito bwanji?

Skillbox imalimbikitsa:

Source: www.habr.com

Kuwonjezera ndemanga