Paghimo usa ka tip calculator sa Kotlin: giunsa kini pagtrabaho?
Gipakita namon kanimo kung giunsa paghimo ang usa ka yano nga aplikasyon sa pagkalkula sa tip sa Kotlin. Aron mahimong mas tukma, Kotlin 1.3.21, Android 4, Android Studio 3. Ang artikulo mahimong makapaikag, una sa tanan, alang niadtong nagsugod sa ilang panaw sa pagpalambo sa mga aplikasyon sa Android. Gitugotan ka niini nga masabtan kung unsa ug kung giunsa ang paglihok sa sulod sa aplikasyon.
Ang ingon nga calculator mapuslanon kung kinahanglan nimo nga kuwentahon ang kantidad sa mga tip gikan sa usa ka kompanya nga nagdesisyon nga mogahin og oras sa usa ka restawran o cafe. Siyempre, dili tanan ug dili kanunay nagbilin og tsa alang sa mga waiter, kini labaw pa sa tradisyon sa Kasadpan, apan ang proseso sa pagpalambo sa maong aplikasyon makapainteres sa bisan unsang kaso.
Gipahinumduman namon ikaw:alang sa tanan nga mga magbabasa sa "Habr" - usa ka diskwento sa 10 nga mga rubles kung nagpalista sa bisan unsang kurso sa Skillbox gamit ang code sa promosyon nga "Habr".
Ania kung unsa ang hitsura sa app kung kini nagdagan:
Gisulod nimo ang gusto nga porsyento sa kinatibuk-ang kantidad, ang gidaghanon sa mga partisipante sa miting ug makuha ang resulta - ang kantidad sa mga tip nga kinahanglan ibilin.
Pagsugod
Ang bug-os nga interface sa app ingon niini:
Unang aksyon - pag-download sa base sa proyekto. Ablihi kini sa Android Studio 3.0 o sa ulahi. Nagtukod kami ug nagpadagan sa proyekto ug nakakita og puti nga screen. Maayo ang tanan, ingon nga kini kinahanglan.
Ang mga aksyon sa tiggamit gisulat sa proyekto sa kronolohikal nga pagkasunod-sunod, aron ang tanan klaro. Aron makita kini, ablihi ang View -> Tool Windows -> TODO.
Among gitun-an ang proyekto ug giablihan ang mga color.xml aron masusi ang color palette. Ang strings.xml adunay mga datos sa teksto (mga caption), ug ang styles.xml adunay daghang mga template sa font.
Pag-uswag sa Seksyon sa Gasto
Ablihi ang activity_main.xml ug idugang ang code sa ubos sa LinearLayout (#1):
Tungod kay ang panguna nga tahas sa aplikasyon mao ang pagkalkulo sa indibidwal nga gasto alang sa matag usa sa mga partisipante sa mga panagtapok sa restawran, ang costPerPersonTextView nagdula sa panguna nga papel.
Gilimitahan sa EditText ang input sa usa ka linya, kini nga parameter kinahanglan itakda sa NumberDecimal inputType.
Gisugdan namo ang proyekto alang sa pagsulay ug gisulod ang mga parameter sa kinatibuk-ang kadaot (buak nga mga tasa, mga plato, ug uban pa)
Pag-uswag sa seksyon nga "Mga Tawo ug Mga Tip".
Aron makadugang usa ka tigpili sa kantidad sa tip, idikit ang code sa ubos sa usa ka bag-ong seksyon sa LinearLayout (#4):
Kini nga piraso sa code gikinahanglan aron tukma nga makalkula ang kantidad sa tip. Ang default text value kay 20. Ang ImageButtons gihatagan og mga icon sa usa ka folder nga adunay mga permiso sa pagsulat.
Kopyaha ang tibuok nga seksyon ug idugang ang mosunod (#5):
ImageButton id (subtractPeopleButton, addPeopleButton)
TextView id (numberOfPeopleStaticText, numberOfPeopleTextView)
DefaultText para sa numberOfPeopleTextView (kinahanglan nga 4).
Karon, sa pagsugod sa aplikasyon, posible nga idugang ang kantidad sa invoice, ang Add / Subtract nga mga buton nagtrabaho usab, apan hangtod karon wala’y mahitabo.
Idugang ang mga View
Ablihi ang MainActivity.kt ug idugang kini sa initViews function (#6):
Sa mga termino sa mga buton ug switch, ang Kotlin adunay tanan nga organisado nga cool kaayo! Idugang ang code sa ubos sa tanan nga pag-uswag ug pagkunhod sa mga gimbuhaton
(#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()
}
}
Dinhi giprotektahan sa code ang mga function sa pagdugang nga adunay labing kadaghan nga kantidad (MAX_TIP & MAX_PEOPLE). Dugang pa, gipanalipdan sa code ang mga function sa pagkunhod nga adunay labing gamay nga kantidad (MIN_TIP & MIN_PEOPLE).
Karon among gibugkos ang mga buton sa mga tigpaminaw sa function sa initViews (#13):
private fun initViews() {
...
addTipButton.setOnClickListener(this)
subtractTipButton.setOnClickListener(this)
addPeopleButton.setOnClickListener(this)
subtractPeopleButton.setOnClickListener(this)
//TODO #15: Bind EditText to TextWatcher
}
Mahimo nimong idugang ang kinatibuk-ang kadaot, mga tip, ug ang gidaghanon sa mga partisipante sa miting. Aw, karon ang labing hinungdanon nga butang ...
Seksyon sa gasto
Kini nga code nagkalkula sa mga gasto (#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)
}
Aw, dinhi gitawag ang usa ka function nga nagpaposible sa pag-isip sa gidaghanon sa mga tawo sa kompanya ug pagkalkulo sa tip (#15):
private fun incrementTip() {
…
}
private fun decrementTip() {
…
}
private fun incrementPeople() {
…
}
private fun decrementPeople() {
…
}
Gilunsad namo ang aplikasyon. Nindot kini tan-awon ug maayo. Apan kini mahimong mas maayo.
Kung sulayan nimo nga tangtangon ang kantidad sa bayronon ug unya dugangan ang gidaghanon sa mga pahiwatig o mga higala, ang app mag-crash tungod kay wala pa’y tseke alang sa zero nga gasto. Dugang pa, kung sulayan nimo nga usbon ang kantidad sa invoice, ang mga singil dili ma-update.
Katapusan nga mga lakang
Idugang ang TextWatcher (#16):
klase MainActivity: AppCompatActivity(), View.OnClickListener, TextWatcher {
Dayon among i-embed ang billEditText listener (#17):
billEditText.addTextChangedListener(nii)
Dugang idugang ang code aron ipatuman ang 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) {}
Aw, karon ang tanan nagtrabaho! Pahalipay, gisulat nimo ang imong kaugalingon nga "Tipping Calculator" sa Kotlin.