Arbatpinigių skaičiuoklės kūrimas Kotlin mieste: kaip tai veikia?
Mes parodome, kaip sukurti paprastą patarimo skaičiavimo programą „Kotlin“. Jei tiksliau, Kotlin 1.3.21, Android 4, Android Studio 3. Straipsnis bus įdomus pirmiausia tiems, kurie pradeda savo kelionę kurdami Android programas. Tai leidžia suprasti, kas ir kaip veikia programoje.
Tokia skaičiuoklė praverčia, kai reikia paskaičiuoti arbatpinigių kiekį iš įmonės, nusprendusios leisti laiką restorane ar kavinėje. Žinoma, ne visi ir ne visada arbatos palieka padavėjams, tai daugiau vakarietiška tradicija, tačiau tokios aplikacijos kūrimo procesas bet kokiu atveju įdomus.
Primename:visiems „Habr“ skaitytojams – 10 000 rublių nuolaida užsiregistravus į bet kurį „Skillbox“ kursą naudojant „Habr“ reklamos kodą.
Įvedate norimą procentą nuo visos sumos, susirinkimo dalyvių skaičių ir gaunate rezultatą – arbatpinigių kiekį, kurį reikėtų palikti.
Pradžia
Visa programos sąsaja atrodo taip:
Pirmas veiksmas - Parsisiųsti projekto bazę. Atidarykite jį naudodami 3.0 ar naujesnės versijos „Android Studio“. Mes kuriame ir vykdome projektą ir matome baltą ekraną. Viskas gerai, kaip ir turi būti.
Vartotojo veiksmai projekte rašomi chronologine tvarka, kad viskas būtų aišku. Norėdami jį peržiūrėti, atidarykite View -> Tool Windows -> TODO.
Studijuojame projektą ir atidarome color.xml, kad įvertintume spalvų paletę. strings.xml yra tekstiniai duomenys (antraštės), o styles.xml yra keli šriftų šablonai.
Išlaidų skyriaus kūrimas
Atidarykite activity_main.xml ir pridėkite toliau pateiktą kodą į linijinį išdėstymą (#1):
Kadangi pagrindinė programos užduotis yra apskaičiuoti individualias išlaidas kiekvienam susirinkimų restorane dalyviui, pagrindinį vaidmenį atlieka „costPersonTextView“.
„EditText“ riboja įvestį iki vienos eilutės, šis parametras turi būti nustatytas į „NumberDecimal inputType“.
Pradedame bandymo projektą ir įvedame bendros žalos parametrus (sulaužyti puodeliai, lėkštės ir kt.)
Skyriaus „Žmonės ir patarimai“ kūrimas
Norėdami pridėti arbatpinigių sumos parinkiklį, įklijuokite toliau esantį kodą į naują linijinio išdėstymo skiltį (#4):
Ši kodo dalis reikalinga norint tiksliai apskaičiuoti arbatpinigių sumą. Numatytoji teksto reikšmė yra 20. ImageButtons yra su piktogramomis aplanke su rašymo leidimais.
Nukopijuokite visą skyrių ir pridėkite šiuos dalykus (#5):
ImageButton ID (subtractPeopleButton, addPeopleButton)
TextView ID (numberOfPeopleStaticText, numberOfPeopleTextView)
Numatytasis tekstas, skirtas numberOfPeopleTextView (turėtų būti 4).
Dabar paleidus aplikaciją galima pridėti sąskaitos sumą, veikia ir mygtukai Add/Atimti, bet dar nieko nevyksta.
Pridėti rodinių
Atidarykite MainActivity.kt ir pridėkite tai prie funkcijos initViews (#6):
Kalbant apie mygtukus ir jungiklius, Kotlin viskas sutvarkyta labai šauniai! Pridėkite toliau pateiktą kodą prie visų didinimo ir mažinimo funkcijų
(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()
}
}
Čia kodas apsaugo didinimo funkcijas maksimaliomis reikšmėmis (MAX_TIP ir MAX_PEOPLE). Be to, kodas apsaugo sumažinimo funkcijas su minimaliomis reikšmėmis (MIN_TIP ir MIN_PEOPLE).
Dabar mygtukus sujungiame su klausytojais funkcijoje initViews (#13):
private fun initViews() {
...
addTipButton.setOnClickListener(this)
subtractTipButton.setOnClickListener(this)
addPeopleButton.setOnClickListener(this)
subtractPeopleButton.setOnClickListener(this)
//TODO #15: Bind EditText to TextWatcher
}
Dabar galite pridėti bendrą žalą, patarimus ir susitikimo dalyvių skaičių. Na, dabar svarbiausia...
Išlaidų skyrius
Šis kodas apskaičiuoja išlaidas (#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)
}
Na, čia vadinama funkcija, kuri leidžia atsižvelgti į žmonių skaičių įmonėje ir apskaičiuoti arbatpinigių (#15):
private fun incrementTip() {
…
}
private fun decrementTip() {
…
}
private fun incrementPeople() {
…
}
private fun decrementPeople() {
…
}
Paleidžiame programą. Puikiai atrodo ir veikia. Bet gali būti geriau.
Jei bandysite pašalinti sąskaitos sumą ir tada padidinti užuominų ar draugų skaičių, programa sugenda, nes dar nėra patikrinimo, ar nėra nulinių mokesčių. Be to, jei bandysite pakeisti sąskaitos faktūros sumą, mokesčiai nebus atnaujinti.
Paskutiniai žingsniai
Pridėti TextWatcher (#16):
class Pagrindinė veikla: AppCompatActivity(), View.OnClickListener, TextWatcher {
Tada įterpiame billEditText klausytoją (#17):
billEditText.addTextChangedListener(this)
Be to, pridėkite kodą, kad paleistumėte „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) {}
Na, dabar viskas veikia! Sveikiname, jūs parašėte savo „arbatpinigių skaičiuoklę“ Kotlin.