Ke kūkulu ʻana i kahi helu helu ma Kotlin: pehea e hana ai?

Ke kūkulu ʻana i kahi helu helu ma Kotlin: pehea e hana ai?

Hōʻike mākou iā ʻoe pehea e hana ai i kahi noi helu helu maʻalahi ma Kotlin. E ʻoi aku ka pololei, ʻo Kotlin 1.3.21, Android 4, Android Studio 3. E hoihoi ka ʻatikala, ʻo ka mea mua, no ka poʻe e hoʻomaka i kā lākou huakaʻi i ka hoʻomohala ʻana i nā noi Android. Hāʻawi ia iā ʻoe e hoʻomaopopo i ka mea a pehea e hana ai i loko o ka noi.

He mea maikaʻi kēlā calculator inā pono ʻoe e helu i ka nui o nā ʻōlelo aʻoaʻo mai kahi hui e hoʻoholo ai e hoʻolimalima manawa i kahi hale ʻaina a i ʻole cafe. ʻOiaʻiʻo, ʻaʻole nā ​​​​mea a pau a ʻaʻole i waiho mau i ke kī no ka poʻe kali, ʻoi aku kēia o ka moʻomeheu Western, akā ʻo ke kaʻina hana o ka hoʻomohala ʻana i ia noi he mea hoihoi i kēlā me kēia hihia.

Hoʻomaopopo mākou iā ʻoe: no ka poʻe heluhelu a pau o "Habr" - kahi ho'ēmi o 10 rubles i ka wā e kākau inoa ai i kekahi papa Skillbox e hoʻohana ana i ka code promotional "Habr".

Manaʻo ʻo Skillbox: Papa hana "Hoʻolālā Mobile PRO.

Eia ke ʻano o ka polokalamu i ka wā e holo ana:

Ke kūkulu ʻana i kahi helu helu ma Kotlin: pehea e hana ai?

Hoʻokomo ʻoe i ka pākēneka i makemake ʻia o ka huina kālā, ka helu o nā mea komo i ka hālāwai a loaʻa ka hopena - ka nui o nā ʻōlelo aʻoaʻo e waiho ʻia.

Ua hoʻomaka

ʻO ke kikowaena piha o ka app e like me kēia:
Ke kūkulu ʻana i kahi helu helu ma Kotlin: pehea e hana ai?

Ke kūkulu ʻana i kahi helu helu ma Kotlin: pehea e hana ai?

ʻO ka hana mua - hoʻoili kahua papahana. E wehe iā ia ma ka Android Studio 3.0 a i ʻole ma hope. Kūkulu mākou a holo i ka papahana a ʻike i kahi pale keʻokeʻo. Ua maikaʻi nā mea a pau, e like me ka mea e pono ai.

Ke kūkulu ʻana i kahi helu helu ma Kotlin: pehea e hana ai?

Ke kūkulu ʻana i kahi helu helu ma Kotlin: pehea e hana ai?

Ua kākau ʻia nā hana a nā mea hoʻohana i loko o ka papahana ma ke ʻano o ka manawa, i maopopo nā mea a pau. No ka nānā ʻana, wehe iā View -> Tool Windows -> TODO.

Aʻo mākou i ka papahana a wehe i nā color.xml e loiloi i ka papa kala. Aia nā strings.xml i ka ʻikepili kikokikona (captions), a ʻo styles.xml kekahi mau hiʻohiʻona kikokikona.

Hoʻomohala ʻāpana kālā

E wehe i ka activity_main.xml a hoʻohui i kēia code i ka 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"/>

I kēia manawa hiki iā ʻoe ke hana i ka papa kuhikuhi waiwai a pāʻani paha me nā kala me ka hoʻohana ʻana mea paahana.io.

I kēia manawa ua like ka papahana:

Ke kūkulu ʻana i kahi helu helu ma Kotlin: pehea e hana ai?
E like me kāu e ʻike ai, hoʻokumu ʻia ka helu kumukūʻai ma ka ʻikepili i hoʻokomo ʻia e ka mea hoʻohana.

Hoʻomohala ʻana i ka ʻāpana moʻokāki

E hoʻohui i ke code ma lalo i ka LinearLayout ma hope o ka pauku lilo (#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>

E pani i ka LinearLayout ma hope o ka papa inoa TODO, a laila e hoʻohui i ke code hou, e kau ana i loko o ka 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"/>

No ka mea ʻo ka hana nui o ka noi ke helu ʻana i nā kumukūʻai pākahi no kēlā me kēia o ka poʻe i komo i nā ʻaha ʻaina i loko o ka hale ʻaina, ʻo ka costPerPersonTextView ke kuleana nui.

Hoʻopili ʻo EditText i ka hoʻokomo i hoʻokahi laina, pono e hoʻonohonoho ʻia kēia ʻāpana i NumberDecimal inputType.

Ke kūkulu ʻana i kahi helu helu ma Kotlin: pehea e hana ai?
Hoʻomaka mākou i ka papahana no ka hoʻāʻo a hoʻokomo i nā ʻāpana o ka pōʻino holoʻokoʻa (nā kīʻaha haki, nā pā, a me nā mea ʻē aʻe)

Ka hoʻomohala ʻana i ka ʻāpana "People and Tips".

No ka hoʻohui ʻana i kahi mea koho nui, hoʻopili i ke code ma lalo i kahi ʻāpana LinearLayout hou (#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>

Pono kēia ʻāpana code no ka helu pono ʻana i ka nui o ka tip. ʻO ka waiwai kikokikona paʻamau he 20. Hāʻawi ʻia nā ImageButtons me nā kiʻi i loko o kahi waihona me nā ʻae kākau.

E kope i ka ʻāpana holoʻokoʻa a hoʻohui i kēia (#5):

  • Nā id ImageButton (subtractPeopleButton, addPeopleButton)
  • TextView id (numberOfPeopleStaticText, numberOfPeopleTextView)
  • DefaultText no numberOfPeopleTextView (pono he 4).

Ke kūkulu ʻana i kahi helu helu ma Kotlin: pehea e hana ai?

I kēia manawa, i ka hoʻomaka ʻana i ka noi, hiki ke hoʻohui i ka nui o ka invoice, hana pū nā pihi Add / Subtract, akā ʻaʻohe mea i hiki.

Pākuʻi Nānā

E wehe i ka MainActivity.kt a hoʻohui i kēia i ka hana 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
 
}

Hoʻopau i nā pihi

No ka hoʻohui ʻana i ke kākoʻo no nā kaomi pihi, e hoʻokō iā View.OnClickListener ma ka pae papa (#7):

papa MainActivity: AppCompatActivity(), View.OnClickListener {

ʻAʻole pono ka hoʻopili ʻana i ka papahana i kēia manawa, pono ʻoe e hana i kekahi mau ʻanuʻu (# 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()
        }
    }

Ma nā ʻōlelo o nā pihi a me nā hoʻololi, ua hoʻonohonoho maikaʻi ʻia ʻo Kotlin i nā mea āpau! E hoʻohui i ke code ma lalo i nā hana hoʻonui a me ka hoʻemi
(#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()
        }
    }

Ma ʻaneʻi e pale ai ke code i nā hana hoʻonui me nā waiwai kiʻekiʻe (MAX_TIP & MAX_PEOPLE). Eia kekahi, pale ka code i nā hana hoʻemi me nā waiwai liʻiliʻi (MIN_TIP & MIN_PEOPLE).

I kēia manawa, hoʻopaʻa mākou i nā pihi i ka poʻe hoʻolohe i ka hana initViews (#13):

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

Ke kūkulu ʻana i kahi helu helu ma Kotlin: pehea e hana ai?

Hiki iā ʻoe ke hoʻohui i nā pōʻino a pau, nā ʻōlelo aʻoaʻo, a me ka helu o nā hui hui. ʻAe, i kēia manawa ka mea nui loa ...

ʻāpana kumukūʻai

Ke helu nei kēia code i nā koina (#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)
 
}

Eia, ua kapa ʻia kahi hana e hiki ai ke noʻonoʻo i ka helu o ka poʻe i loko o ka hui a helu i ka piko (#15):

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

Hoʻomaka mākou i ka noi. Nānā a hana maikaʻi. Akā ʻoi aku ka maikaʻi.

Inā ʻoe e hoʻāʻo e wehe i ka nui o ka bila a laila e hoʻonui i ka helu o nā ʻōlelo aʻoaʻo a i ʻole nā ​​hoaaloha, e hāʻule ka app no ​​ka mea ʻaʻohe ʻike no nā koina ʻole. Eia kekahi, inā e hoʻāʻo ʻoe e hoʻololi i ka nui o ka invoice, ʻaʻole e hoʻonui ʻia nā uku.

Nā ʻanuʻu hope

Hoʻohui i TextWatcher (#16):

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

A laila hoʻokomo mākou i ka mea hoʻolohe billEditText (#17):

billEditText.addTextChangedListener(kēia)

Hoʻohui hou i ke code e hoʻokō i ka 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) {}

Ke kūkulu ʻana i kahi helu helu ma Kotlin: pehea e hana ai?

ʻAe, i kēia manawa ua hana nā mea a pau! Mahalo, ua kākau ʻoe i kāu "Tipping Calculator" ma Kotlin.

Ke kūkulu ʻana i kahi helu helu ma Kotlin: pehea e hana ai?

Manaʻo ʻo Skillbox:

Source: www.habr.com

Pākuʻi i ka manaʻo hoʻopuka