Dzeramnaudas kalkulatora izveide KotlinÄ: kÄ tas darbojas?
MÄs parÄdÄ«sim, kÄ izveidot vienkÄrÅ”u padomu aprÄÄ·inÄÅ”anas lietojumprogrammu KotlinÄ. PrecÄ«zÄk sakot, Kotlin 1.3.21, Android 4, Android Studio 3. Raksts bÅ«s interesants, pirmkÄrt, tiem, kas sÄk savu ceļu Android aplikÄciju izstrÄdÄ. Tas ļauj saprast, kas un kÄ darbojas lietojumprogrammÄ.
Å Äds kalkulators noder, kad jÄaprÄÄ·ina dzeramnaudu apjoms no uzÅÄmuma, kas nolemj pavadÄ«t laiku restorÄnÄ vai kafejnÄ«cÄ. Protams, ne visi un ne vienmÄr atstÄj tÄju viesmīļiem, tÄ vairÄk ir Rietumu tradÄ«cija, taÄu Å”Ädas aplikÄcijas izstrÄdes process ir interesants jebkurÄ gadÄ«jumÄ.
JÅ«s ievadÄt vÄlamo procentuÄlo daļu no kopÄjÄs summas, sapulces dalÄ«bnieku skaitu un iegÅ«stat rezultÄtu - dzeramnaudu daudzumu, kas jÄatstÄj.
PirmÄ darbÄ«ba - projektu bÄzes lejupielÄde. Atveriet to Android Studio 3.0 vai jaunÄkÄ versijÄ. MÄs veidojam un izpildÄm projektu un redzam baltu ekrÄnu. Viss ir labi, kÄ tam jÄbÅ«t.
LietotÄju darbÄ«bas projektÄ ir ierakstÄ«tas hronoloÄ£iskÄ secÄ«bÄ, lai viss bÅ«tu skaidrs. Lai to skatÄ«tu, atveriet View -> Tool Windows -> TODO.
MÄs izpÄtÄm projektu un atveram colours.xml, lai novÄrtÄtu krÄsu paleti. Strings.xml satur teksta datus (titrus), un styles.xml satur vairÄkas fontu veidnes.
Izmaksu sadaļas izstrÄde
Atveriet activity_main.xml un pievienojiet tÄlÄk norÄdÄ«to kodu lineÄrajam izkÄrtojumam (#1):
TÄ kÄ aplikÄcijas galvenais uzdevums ir aprÄÄ·inÄt individuÄlÄs izmaksas katram pasÄkuma dalÄ«bniekam restorÄnÄ, tad galvenÄ loma ir costPersonTextView.
EditText ierobežo ievadi ar vienu rindiÅu, Å”im parametram ir jÄbÅ«t iestatÄ«tam uz NumberDecimal inputType.
MÄs sÄkam projektu testa veikÅ”anai un ievadÄm kopÄjo bojÄjumu parametrus (salauztas krÅ«zes, Ŕķīvji utt.)
Sadaļas "CilvÄki un padomi" izstrÄde
Lai pievienotu dzeramnaudas summas atlasÄ«tÄju, ielÄ«mÄjiet tÄlÄk norÄdÄ«to kodu jaunÄ LineÄrÄ izkÄrtojuma sadaÄ¼Ä (#4):
Å Ä« koda daļa ir nepiecieÅ”ama, lai precÄ«zi aprÄÄ·inÄtu dzeramnaudas summu. NoklusÄjuma teksta vÄrtÄ«ba ir 20. ImageButtons ir nodroÅ”inÄtas ar ikonÄm mapÄ ar rakstÄ«Å”anas atļaujÄm.
KopÄjiet visu sadaļu un pievienojiet Å”o (#5):
ImageButton ID (subtractPeopleButton, addPeopleButton)
TextView ID (numberOfPeopleStaticText, numberOfPeopleTextView)
RunÄjot par pogÄm un slÄdžiem, Kotlinam viss ir ļoti forÅ”i organizÄts! Pievienojiet tÄlÄk norÄdÄ«to kodu visÄm palielinÄÅ”anas un samazinÄÅ”anas funkcijÄm
(#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()
}
}
Å eit kods aizsargÄ pieauguma funkcijas ar maksimÄlajÄm vÄrtÄ«bÄm (MAX_TIP & MAX_PEOPLE). TurklÄt kods aizsargÄ samazinÄÅ”anas funkcijas ar minimÄlajÄm vÄrtÄ«bÄm (MIN_TIP & MIN_PEOPLE).
Tagad mÄs saistÄm pogas ar klausÄ«tÄjiem initViews funkcijÄ (#13):
private fun initViews() {
...
addTipButton.setOnClickListener(this)
subtractTipButton.setOnClickListener(this)
addPeopleButton.setOnClickListener(this)
subtractPeopleButton.setOnClickListener(this)
//TODO #15: Bind EditText to TextWatcher
}
Tagad varat pievienot kopÄjo bojÄjumu, padomus un sapulces dalÄ«bnieku skaitu. Nu, tagad pats svarÄ«gÄkais...
Izmaksu sadaļa
Å is kods aprÄÄ·ina izmaksas (#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)
}
Å eit tiek izsaukta funkcija, kas ļauj Åemt vÄrÄ cilvÄku skaitu uzÅÄmumÄ un aprÄÄ·inÄt dzeramnaudu (#15):
private fun incrementTip() {
ā¦
}
private fun decrementTip() {
ā¦
}
private fun incrementPeople() {
ā¦
}
private fun decrementPeople() {
ā¦
}
MÄs palaižam lietojumprogrammu. Tas izskatÄs un darbojas lieliski. Bet varÄtu bÅ«t labÄk.
Ja mÄÄ£inÄsit noÅemt rÄÄ·ina summu un pÄc tam palielinÄt mÄjienu vai draugu skaitu, lietotne avarÄs, jo vÄl nav pÄrbaudÄ«ta nulles izmaksas. TurklÄt, ja mÄÄ£inÄsiet mainÄ«t rÄÄ·ina summu, maksa netiks atjauninÄta.
PÄdÄjie soļi
Pievienojiet TextWatcher (#16):
class GalvenÄ darbÄ«ba: AppCompatActivity(), View.OnClickListener, TextWatcher {
PÄc tam mÄs iegulsim billEditText klausÄ«tÄju (#17):
billEditText.addTextChangedListener(this)
TurklÄt pievienojiet kodu, lai izpildÄ«tu 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) {}
Nu, tagad viss darbojas! Apsveicam, jÅ«s esat uzrakstÄ«jis pats savu "DzÄrienu kalkulatoru" KotlinÄ.