Kuunda kikokotoo cha ncha huko Kotlin: inafanya kazije?
Tunakuonyesha jinsi ya kuunda programu rahisi ya kuhesabu vidokezo huko Kotlin. Ili kuwa sahihi zaidi, Kotlin 1.3.21, Android 4, Android Studio 3. Makala itakuwa ya kuvutia, kwanza kabisa, kwa wale wanaoanza safari yao katika kuendeleza programu za Android. Inakuruhusu kuelewa ni nini na jinsi inavyofanya kazi ndani ya programu.
Calculator vile ni muhimu wakati unahitaji kuhesabu kiasi cha vidokezo kutoka kwa kampuni inayoamua kutumia muda katika mgahawa au cafe. Kwa kweli, sio kila mtu na sio kila wakati huacha chai kwa wahudumu, hii ni zaidi ya mila ya Magharibi, lakini mchakato wa kukuza programu kama hiyo ni ya kuvutia kwa hali yoyote.
Tunakukumbusha:kwa wasomaji wote wa "Habr" - punguzo la rubles 10 wakati wa kujiandikisha katika kozi yoyote ya Skillbox kwa kutumia msimbo wa uendelezaji wa "Habr".
Hivi ndivyo programu inavyoonekana wakati inaendeshwa:
Unaingiza asilimia inayotakiwa ya jumla ya kiasi, idadi ya washiriki katika mkutano na kupata matokeo - kiasi cha vidokezo vinavyopaswa kuachwa.
Kuanza
Kiolesura kamili cha programu inaonekana kama hii:
Hatua ya kwanza - upakuaji wa msingi wa mradi. Ifungue katika Android Studio 3.0 au matoleo mapya zaidi. Tunaunda na kuendesha mradi na kuona skrini nyeupe. Kila kitu ni sawa, kama inavyopaswa kuwa.
Vitendo vya mtumiaji vimeandikwa katika mradi kwa mpangilio wa wakati, ili kila kitu kiwe wazi. Ili kuiona, fungua Tazama -> Zana ya Windows -> TODO.
Tunasoma mradi na kufungua rangi.xml ili kutathmini ubao wa rangi. strings.xml ina data ya maandishi (manukuu), na styles.xml ina violezo kadhaa vya fonti.
Maendeleo ya Sehemu ya Gharama
Fungua shughuli_main.xml na uongeze msimbo ulio hapa chini kwenye LinearLayout (#1):
Kwa kuwa kazi kuu ya programu ni kukokotoa gharama binafsi kwa kila mmoja wa washiriki katika mikusanyiko katika mgahawa, costPerPersonTextView ina jukumu kuu.
EditText inaweka mipaka kwenye mstari mmoja, kigezo hiki lazima kiwekwe kuwa NumberDecimal inputType.
Tunaanza mradi wa mtihani na kuingiza vigezo vya uharibifu wa jumla (vikombe vilivyovunjika, sahani, nk).
Maendeleo ya sehemu ya "Watu na Vidokezo".
Ili kuongeza kichaguzi cha kiasi cha kidokezo, bandika msimbo ulio hapa chini kwenye sehemu mpya ya LinearLayout (#4):
Sehemu hii ya msimbo inahitajika ili kuhesabu kwa usahihi kiasi cha kidokezo. Thamani ya maandishi chaguo-msingi ni 20. ImageButtons hutolewa na ikoni kwenye folda iliyo na ruhusa ya kuandika.
Nakili sehemu nzima na uongeze zifuatazo (#5):
Vitambulisho vyaKitufe cha Picha (ondoaKitufe cha watu, ongezaKitufe cha watu)
Vitambulisho vya Mwonekano wa Maandishi (numberOfPeopleStaticText, numberOfPeopleTextView)
Maandishi Chaguomsingi ya numberOfPeopleTextView (inapaswa kuwa 4).
Sasa, wakati wa kuanza programu, inawezekana kuongeza kiasi cha ankara, vifungo vya Ongeza / Ondoa pia hufanya kazi, lakini hadi sasa hakuna kinachotokea.
Ongeza Maoni
Fungua MainActivity.kt na uongeze hii kwenye kitendakazi cha initViews (#6):
Kwa upande wa vifungo na swichi, Kotlin ina kila kitu kilichopangwa vizuri sana! Ongeza nambari iliyo hapa chini kwa kazi zote za kuongeza na kupunguza
(#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()
}
}
Hapa msimbo hulinda vitendaji vya nyongeza na viwango vya juu zaidi (MAX_TIP & MAX_PEOPLE). Kwa kuongezea, msimbo hulinda vitendakazi vya kupunguza na viwango vya chini zaidi (MIN_TIP & MIN_PEOPLE).
Sasa tunafunga vifungo kwa wasikilizaji kwenye kitendakazi cha initViews (#13):
private fun initViews() {
...
addTipButton.setOnClickListener(this)
subtractTipButton.setOnClickListener(this)
addPeopleButton.setOnClickListener(this)
subtractPeopleButton.setOnClickListener(this)
//TODO #15: Bind EditText to TextWatcher
}
Sasa unaweza kuongeza jumla ya uharibifu, vidokezo na idadi ya washiriki wa mkutano. Kweli, sasa jambo muhimu zaidi ...
Sehemu ya gharama
Msimbo huu unakokotoa gharama (#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)
}
Kweli, hapa kazi inaitwa ambayo inafanya uwezekano wa kuzingatia idadi ya watu kwenye kampuni na kuhesabu kidokezo (#15):
private fun incrementTip() {
β¦
}
private fun decrementTip() {
β¦
}
private fun incrementPeople() {
β¦
}
private fun decrementPeople() {
β¦
}
Tunazindua programu. Inaonekana na inafanya kazi vizuri. Lakini inaweza kuwa bora zaidi.
Ukijaribu kuondoa kiasi cha bili na kisha kuongeza idadi ya vidokezo au marafiki, programu itaacha kufanya kazi kwa sababu bado hakuna hundi ya gharama sifuri. Zaidi ya hayo, ukijaribu kubadilisha kiasi cha ankara, gharama hazitasasishwa.
Hatua za mwisho
Ongeza TextWatcher (#16):
class Shughuli kuu: AppCompatActivity(), View.OnClickListener, TextWatcher {
Kisha tunapachika msikilizaji wa BillEditText (#17):
billEditText.addTextChangedListener(hii)
Pia ongeza nambari ya kutekeleza 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) {}
Naam, sasa kila kitu kinafanya kazi! Hongera, umeandika "Tipping Calculator" yako mwenyewe huko Kotlin.