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".
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:
ʻ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.
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):
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.
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):
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).
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):
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
}
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) {}
ʻAe, i kēia manawa ua hana nā mea a pau! Mahalo, ua kākau ʻoe i kāu "Tipping Calculator" ma Kotlin.