Прављење калкулатора савета у Котлину: како то функционише?
Говоримо вам како да направите једноставну апликацију за израчунавање савета у Котлину. Тачније, Котлин 1.3.21, Андроид 4, Андроид Студио 3. Чланак ће бити занимљив, пре свега, за оне који почињу свој пут у развоју Андроид апликација. Омогућава вам да разумете шта и како функционише унутар апликације.
Овај калкулатор ће вам добро доћи када треба да израчунате количину бакшиша од компаније која одлучи да проведе време у ресторану или кафићу. Наравно, не остављају сви увек напојницу конобарима, ово је више западњачка традиција, али процес развоја такве апликације је у сваком случају занимљив.
Подсећамо:за све читаоце „Хабра“ – попуст од 10 рубаља при упису на било који курс Скиллбок користећи промотивни код „Хабр“.
Уписујете жељени проценат од укупног износа, број учесника састанка и добијате резултат – износ напојнице који треба да оставите.
Геттинг стартед
Комплетан интерфејс апликације изгледа овако:
Прва акција - преузимање базе пројекта. Отворите га у Андроид Студију 3.0 или новијој. Градимо и покрећемо пројекат и видимо бели екран. Све је у реду, тако треба.
Акције корисника су записане у пројекту хронолошким редом како би све било јасно. Да бисте га видели, отворите Приказ -> Прозори алата -> ТОДО.
Проучавамо пројекат и отварамо цолорс.кмл да проценимо палету боја. стрингс.кмл садржи текстуалне податке (потписе), а стилес.кмл садржи неколико шаблона фонтова.
Развој секције трошкова
Отворите ацтивити_маин.кмл и додајте код испод у ЛинеарЛаиоут (#1):
Овај део кода је неопходан за тачно израчунавање износа напојнице. Подразумевана вредност текста је 20. Дугмад за слике имају иконе у фасцикли са дозволама за писање.
У потпуности копирајте одељак и додајте следеће (#5):
Што се тиче дугмади и прекидача, Котлин организује све веома кул! Додајте код испод свим функцијама повећања и смањења
(#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()
}
}
Овде код штити функције повећања са максималним вредностима (МАКС_ТИП & МАКС_ПЕОПЛЕ). Поред тога, код штити функције смањења минималним вредностима (МИН_ТИП & МИН_ПЕОПЛЕ).
Сада повезујемо дугмад са слушаоцима у функцији инитВиевс (#13):
private fun initViews() {
...
addTipButton.setOnClickListener(this)
subtractTipButton.setOnClickListener(this)
addPeopleButton.setOnClickListener(this)
subtractPeopleButton.setOnClickListener(this)
//TODO #15: Bind EditText to TextWatcher
}
Сада можете додати укупну штету, напојнице и број учесника састанка. Е, сад оно најважније...
Одељак за обрачун трошкова
Овај код израчунава трошкове (#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)
}
Па, овде се позива функција која омогућава да се узме у обзир број људи у компанији и израчунају савети (#15):
private fun incrementTip() {
…
}
private fun decrementTip() {
…
}
private fun incrementPeople() {
…
}
private fun decrementPeople() {
…
}
Хајде да покренемо апликацију. Изгледа и ради одлично. Али могло би бити боље.
Ако покушате да уклоните износ рачуна, а затим повећате број савета или пријатеља, апликација ће се срушити јер још нема провере за нулту вредност трошкова. Штавише, ако покушате да промените износ рачуна, трошкови се неће ажурирати.