Котлинде учтун калькуляторун куруу: ал кантип иштейт?
Биз сизге Котлинде жөнөкөй кеңешти эсептөө тиркемесин кантип түзүүнү көрсөтөбүз. Тагыраак айтканда, Kotlin 1.3.21, Android 4, Android Studio 3. Макала, биринчи кезекте, Android тиркемелерин иштеп чыгууда өз сапарын баштагандар үчүн кызыктуу болот. Бул колдонмонун ичинде эмне жана кантип иштээрин түшүнүүгө мүмкүндүк берет.
Мындай калькулятор ресторанда же кафеде убакыт өткөрүүнү чечкен компаниянын кеңештеринин суммасын эсептөө керек болгондо пайдалуу. Албетте, баары эмес жана ар дайым официанттарга чай калтырбайт, бул батыштын салты, бирок мындай тиркемени иштеп чыгуу процесси кандай болгон күндө да кызыктуу.
Биз эсиңизге салабыз:"Хабрдын" бардык окурмандары үчүн - "Habr" промо-кодун колдонуу менен каалаган Skillbox курсуна катталганда 10 000 рубль арзандатуу.
Сиз жалпы сумманын каалаган пайызын, жолугушуунун катышуучуларынын санын киргизип, натыйжаны аласыз - кетүүгө татыктуу кеңештердин суммасы.
баштоо
Колдонмонун толук интерфейси төмөнкүдөй көрүнөт:
Биринчи иш - долбоордун базасын жүктөп алуу. Аны Android Studio 3.0 же кийинки версиясында ачыңыз. Биз долбоорду куруп, иштетип, ак экранды көрөбүз. Баары жакшы, болушу керек эле.
Колдонуучунун аракеттери долбоордо хронологиялык тартипте жазылгандыктан, баары түшүнүктүү. Аны көрүү үчүн, Көрүү -> Курал Windows -> TODO ачыңыз.
Биз долбоорду изилдеп, түс палитрасын баалоо үчүн colors.xml ачабыз. strings.xml текст маалыматтарын (коштомо жазууларды) камтыйт, ал эми styles.xml бир нече шрифт шаблондорун камтыйт.
Чыгымдар бөлүмүн иштеп чыгуу
activity_main.xml ачып, төмөнкү кодду LinearLayout (№1) үчүн кошуңуз:
Тиркеменин негизги милдети ресторандагы чогулуштарга катышуучулардын ар бири үчүн жеке чыгымдарды эсептөө болгондуктан, costPerPersonTextView негизги ролду ойнойт.
EditText киргизүүнү бир сап менен чектейт, бул параметр NumberDecimal inputType деп коюлушу керек.
Биз сыноо үчүн долбоорду баштайбыз жана жалпы зыяндын параметрлерин киргизебиз (сынган чөйчөк, табак ж.б.)
«Адамдар жана кеңештер» бөлүмүн иштеп чыгуу
Үндүн көлөмүн тандоо үчүн төмөнкү кодду жаңы LinearLayout бөлүмүнө чаптаңыз (№4):
Коддун бул бөлүгү учтун суммасын так эсептөө үчүн талап кылынат. Демейки тексттин мааниси 20. ImageButtons жазуу уруксаттары бар папкадагы иконалар менен камсыз кылынат.
Бөлүмдү толугу менен көчүрүп, төмөнкүнү кошуңуз (№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()
}
}
Бул жерде код кошумча функцияларды максималдуу маанилер менен коргойт (MAX_TIP & MAX_PEOPLE). Мындан тышкары, код төмөндөтүү функцияларын минималдуу маанилер менен коргойт (MIN_TIP & MIN_PEOPLE).
Эми биз баскычтарды initViews функциясында угуучуларга байлайбыз (№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() {
…
}
Биз колдонмону ишке киргизебиз. Ал көрүнөт жана сонун иштейт. Бирок жакшыраак болушу мүмкүн.
Эгер сиз эсеп-дүмүрчөктүн суммасын алып салууга аракет кылып, андан кийин кеңештердин же достордун санын көбөйтүүгө аракет кылсаңыз, колдонмо бузулуп калат, анткени азырынча нөлдүк чыгымдарды текшерүү жок. Мындан тышкары, эгерде сиз эсеп-фактуранын суммасын өзгөртүүгө аракет кылсаңыз, төлөмдөр жаңыртылбайт.
Акыркы кадамдар
TextWatcher кошуу (№16):
Class MainActivity: AppCompatActivity(), View.OnClickListener, TextWatcher {
Андан кийин биз billEditText угуучусун киргизебиз (№17):
billEditText.addTextChangedListener(бул)
Plus 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) {}
Ооба, азыр баары иштейт! Куттуктайбыз, сиз Котлинде өзүңүздүн "Балклама калькуляторуңузду" жаздыңыз.