БъздаванС Π½Π° ΠΊΠ°Π»ΠΊΡƒΠ»Π°Ρ‚ΠΎΡ€ Π·Π° бакшиши Π½Π° Kotlin: ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚ΠΈ Ρ‚ΠΎΠ²Π°?

БъздаванС Π½Π° ΠΊΠ°Π»ΠΊΡƒΠ»Π°Ρ‚ΠΎΡ€ Π·Π° бакшиши Π½Π° Kotlin: ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚ΠΈ Ρ‚ΠΎΠ²Π°?

Π Π°Π·ΠΊΠ°Π·Π²Π°ΠΌΠ΅ ΠΊΠ°ΠΊ Π΄Π° ΡΡŠΠ·Π΄Π°Π΄Π΅Ρ‚Π΅ просто ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π·Π° изчисляванС Π½Π° бакшиш Π½Π° Π΅Π·ΠΈΠΊΠ° Kotlin. По-Ρ‚ΠΎΡ‡Π½ΠΎ, съгласно Kotlin 1.3.21, Android 4, Android Studio 3. Бтатията Ρ‰Π΅ бъдС интСрСсна ΠΏΡ€Π΅Π΄ΠΈ всичко Π·Π° Ρ‚Π΅Π·ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ Π·Π°ΠΏΠΎΡ‡Π²Π°Ρ‚ своя ΠΏΡŠΡ‚ Π² Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°Ρ‚Π° Π½Π° Android прилоТСния. Вя позволява Π΄Π° сС Ρ€Π°Π·Π±Π΅Ρ€Π΅ ΠΊΠ°ΠΊΠ²ΠΎ ΠΈ ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚ΠΈ Π²ΡŠΡ‚Ρ€Π΅ Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ.

Вакъв ΠΊΠ°Π»ΠΊΡƒΠ»Π°Ρ‚ΠΎΡ€ Ρ‰Π΅ бъдС ΠΏΠΎΠ»Π΅Π·Π΅Π½, ΠΊΠΎΠ³Π°Ρ‚ΠΎ трябва Π΄Π° сС прСсмСтнС ΠΎΠ±Ρ‰Π°Ρ‚Π° сума Π½Π° Π±Π°ΠΊΡˆΠΈΡˆΠΈΡ‚Π΅ Π·Π° компания, Ρ€Π΅ΡˆΠΈΠ»Π° Π΄Π° ΠΏΡ€Π΅ΠΊΠ°Ρ€Π° Π²Ρ€Π΅ΠΌΠ΅ Π² рСсторант ΠΈΠ»ΠΈ ΠΊΠ°Ρ„Π΅. Π Π°Π·Π±ΠΈΡ€Π° сС, Π½Π΅ всички ΠΈ Π½Π΅ Π²ΠΈΠ½Π°Π³ΠΈ оставят бакшиш Π½Π° ΡΠ΅Ρ€Π²ΠΈΡ‚ΡŒΠΎΡ€ΠΈΡ‚Π΅, Ρ‚ΠΎΠ²Π° Π΅ ΠΏΠΎ-скоро Π·Π°ΠΏΠ°Π΄Π½Π° традиция, Π½ΠΎ ΠΏΡ€ΠΎΡ†Π΅ΡΡŠΡ‚ Π½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° Ρ‚Π°ΠΊΠΎΠ²Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π΅ интСрСсСн нСзависимо ΠΎΡ‚ всичко.

НапомнямС: Π·Π° всички Ρ‡ΠΈΡ‚Π°Ρ‚Π΅Π»ΠΈ Π½Π° Β«Π₯Π°Π±Ρ€Π°Β» β€” ΠΎΡ‚ΡΡ‚ΡŠΠΏΠΊΠ° ΠΎΡ‚ 10 000 Ρ€ΡƒΠ±Π»ΠΈ ΠΏΡ€ΠΈ записванС Π½Π° всСки курс Skillbox с ΠΏΡ€ΠΎΠΌΠΎΠΊΠΎΠ΄ Β«Π₯Π°Π±Ρ€Β».

Skillbox ΠΏΡ€Π΅ΠΏΠΎΡ€ΡŠΡ‡Π²Π°: ΠŸΡ€Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΠΈ курс МобилСн Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ PRO.

Π•Ρ‚ΠΎ ΠΊΠ°ΠΊ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ Π² процСс Π½Π° Ρ€Π°Π±ΠΎΡ‚Π°:

БъздаванС Π½Π° ΠΊΠ°Π»ΠΊΡƒΠ»Π°Ρ‚ΠΎΡ€ Π·Π° бакшиши Π½Π° Kotlin: ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚ΠΈ Ρ‚ΠΎΠ²Π°?

Π’ΡŠΠ²Π΅Π΄Π΅Ρ‚Π΅ ТСлания ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚ ΠΎΡ‚ ΠΎΠ±Ρ‰Π°Ρ‚Π° сума, количСството участници Π² срСщата ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°Ρ‚Π΅ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚Π° β€” сумата Π½Π° Π±Π°ΠΊΡˆΠΈΡˆΠΈΡ‚Π΅, която трябва Π΄Π° сС остави.

Π—Π°ΠΏΠΎΡ‡Π²Π°ΠΌΠ΅

ЦСлият интСрфСйс Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° ΠΏΠΎ слСдния Π½Π°Ρ‡ΠΈΠ½:
БъздаванС Π½Π° ΠΊΠ°Π»ΠΊΡƒΠ»Π°Ρ‚ΠΎΡ€ Π·Π° бакшиши Π½Π° Kotlin: ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚ΠΈ Ρ‚ΠΎΠ²Π°?

БъздаванС Π½Π° ΠΊΠ°Π»ΠΊΡƒΠ»Π°Ρ‚ΠΎΡ€ Π·Π° бакшиши Π½Π° Kotlin: ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚ΠΈ Ρ‚ΠΎΠ²Π°?

ΠŸΡŠΡ€Π²ΠΎΡ‚ΠΎ дСйствиС β€” Π·Π°Ρ€Π΅ΠΆΠ΄Π°Π½Π΅ Π½Π° основата Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°. ΠžΡ‚Π²Π°Ρ€ΡΠΌΠ΅ я Π² Android Studio 3.0 ΠΈΠ»ΠΈ ΠΏΠΎ-Π½ΠΎΠ²Π° вСрсия. БъздавамС ΠΈ стартирамС ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ΠΈ Π²ΠΈΠΆΠ΄Π°ΠΌΠ΅ бял Π΅ΠΊΡ€Π°Π½. Всичко Π΅ Π½Π°Ρ€Π΅Π΄, Ρ‚Π°ΠΊΠ° ΠΈ трябва Π΄Π° бъдС.ДСйствията Π½Π° потрСбитСля са описани Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π² Ρ…Ρ€ΠΎΠ½ΠΎΠ»ΠΎΠ³ΠΈΡ‡Π΅Π½ Ρ€Π΅Π΄, Π·Π° Π΄Π° бъдС всичко ясно. Π—Π° Π΄Π° Π³ΠΎ Π²ΠΈΠ΄ΠΈΡ‚Π΅, ΠΎΡ‚Π²ΠΎΡ€Π΅Ρ‚Π΅ View -> Tool Windows -> TODO.

БъздаванС Π½Π° ΠΊΠ°Π»ΠΊΡƒΠ»Π°Ρ‚ΠΎΡ€ Π·Π° бакшиши Π½Π° Kotlin: ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚ΠΈ Ρ‚ΠΎΠ²Π°?

БъздаванС Π½Π° ΠΊΠ°Π»ΠΊΡƒΠ»Π°Ρ‚ΠΎΡ€ Π·Π° бакшиши Π½Π° Kotlin: ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚ΠΈ Ρ‚ΠΎΠ²Π°?

Π˜Π·ΡƒΡ‡Π°Π²Π°ΠΌΠ΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ΠΈ отварямС colors.xml, Π·Π° Π΄Π° ΠΎΡ†Π΅Π½ΠΈΠΌ Ρ†Π²Π΅Ρ‚Π½Π°Ρ‚Π° ΠΏΠ°Π»ΠΈΡ‚Ρ€Π°. Π’ strings.xml са Ρ€Π°Π·ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈ тСкстовитС Π΄Π°Π½Π½ΠΈ (надписи), Π° Π² styles.xml ΠΈΠΌΠ° няколко шаблона Π·Π° ΡˆΡ€ΠΈΡ„Ρ‚ΠΎΠ²Π΅.

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° Ρ€Π°Π·Π΄Π΅Π»Π° Π·Π° Ρ€Π°Π·Ρ…ΠΎΠ΄ΠΈ.

ΠžΡ‚Π²Π°Ρ€ΡΠΌΠ΅ activity_main.xml ΠΈ добавямС слСдния ΠΊΠΎΠ΄ Π² LinearLayout (#1):

Π‘Π΅Π³Π° ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° настроитС стила Π½Π° дирСкторията values ΠΈΠ»ΠΈ Π΄Π° СкспСримСнтиратС с Ρ†Π²Π΅Ρ‚ΠΎΠ²Π΅Ρ‚Π΅, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ

инструмСнта material.io. Π‘Π΅Π³Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΡŠΡ‚ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° Ρ‚Π°ΠΊΠ°:.

Как Π²ΠΈΠΆΠ΄Π°Ρ‚Π΅, изчислСниСто Π½Π° Ρ€Π°Π·Ρ…ΠΎΠ΄ΠΈΡ‚Π΅ сС ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π° Π½Π° Π±Π°Π·Π°Ρ‚Π° Π½Π° Π΄Π°Π½Π½ΠΈΡ‚Π΅, въвСдСни ΠΎΡ‚ потрСбитСля.

БъздаванС Π½Π° ΠΊΠ°Π»ΠΊΡƒΠ»Π°Ρ‚ΠΎΡ€ Π·Π° бакшиши Π½Π° Kotlin: ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚ΠΈ Ρ‚ΠΎΠ²Π°?
Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° Ρ€Π°Π·Π΄Π΅Π»Π° Π·Π° смСтки.

ДобавямС ΠΊΠΎΠ΄Π°, прСдставСн ΠΏΠΎ-Π΄ΠΎΠ»Ρƒ, Π² LinearLayout слСд Ρ€Π°Π·Π΄Π΅Π»Π° Π·Π° Ρ€Π°Π·Ρ…ΠΎΠ΄ΠΈ (#2):

<! β€” TODO #3: Build Bill Section →…

ЗатварямС LinearLayout слСд списъка TODOs ΠΈ слСд Ρ‚ΠΎΠ²Π° добавямС Π½ΠΎΠ² ΠΊΠΎΠ΄, Ρ€Π°Π·ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ Π²ΡŠΡ‚Ρ€Π΅ Π² LinearLayout (#3):

ΠžΡΠ½ΠΎΠ²Π½Π°Ρ‚Π° Π·Π°Π΄Π°Ρ‡Π° Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ Π΅ Π΄Π° изчисли ΠΈΠ½Π΄ΠΈΠ²ΠΈΠ΄ΡƒΠ°Π»Π½ΠΈΡ‚Π΅ Ρ€Π°Π·Ρ…ΠΎΠ΄ΠΈ Π·Π° всСки участник Π² рСсторантскитС Π½Π°Π²ΠΈΡ†ΠΈ, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ основното Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΠΌΠ° costPerPersonTextView.

EditText ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π°Π²Π° Π²ΡŠΠ²Π΅ΠΆΠ΄Π°Π½Π΅Ρ‚ΠΎ Π½Π° Π΄Π°Π½Π½ΠΈ Π΄ΠΎ Π΅Π΄ΠΈΠ½ Ρ€Π΅Π΄, Π° стойността Π½Π° Ρ‚ΠΎΠ·ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ΡŠΡ€ трябва Π΄Π° бъдС NumberDecimal inputType.

БъздаванС Π½Π° ΠΊΠ°Π»ΠΊΡƒΠ»Π°Ρ‚ΠΎΡ€ Π·Π° бакшиши Π½Π° Kotlin: ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚ΠΈ Ρ‚ΠΎΠ²Π°?
Π‘Ρ‚Π°Ρ€Ρ‚ΠΈΡ€Π°ΠΌΠ΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π·Π° тСст ΠΈ въвСТдамС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ Π·Π° ΠΎΠ±Ρ‰ΠΈΡ‚Π΅ Ρ‰Π΅Ρ‚ΠΈ (Ρ€Π°Π·Π±ΠΈΡ‚ΠΈ Ρ‡Π°ΡˆΠΈ, Ρ‡ΠΈΠ½ΠΈΠΈ ΠΈ Ρ‚.Π½.)

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° Ρ€Π°Π·Π΄Π΅Π»Π° β€žΠ₯ΠΎΡ€Π° ΠΈ Π±Π°ΠΊΡˆΠΈΡˆΠΈβ€œ

Π—Π° Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈΠΌ опция Π·Π° ΠΎΠ±Π΅ΠΌ Π½Π° Π±Π°ΠΊΡˆΠΈΡˆΠΈΡ‚Π΅, вмъквамС слСдния ΠΊΠΎΠ΄ Π² новия LinearLayout (#4):

Π’ΠΎΠ·ΠΈ Π±Π»ΠΎΠΊ ΠΊΠΎΠ΄ Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ Π·Π° Ρ‚ΠΎΡ‡Π΅Π½ изчислСниС Π½Π° сумата Π½Π° Π±Π°ΠΊΡˆΠΈΡˆΠΈΡ‚Π΅. Π”Π΅Ρ„ΠΎΠ»Ρ‚Π½Π°Ρ‚Π° стойност Π½Π° тСкста Π΅ 20. ImageButtons са снабдСни с ΠΈΠΊΠΎΠ½ΠΊΠΈ Π² ΠΏΠ°ΠΏΠΊΠ°Ρ‚Π° с ΠΏΡ€Π°Π²Π° Π·Π° запис.

ΠšΠΎΠΏΠΈΡ€Π°ΠΌΠ΅ напълно Ρ€Π°Π·Π΄Π΅Π»Π° ΠΈ добавямС слСдното (#5):

  • ImageButton ids (subtractPeopleButton, addPeopleButton)
  • TextView ids (numberOfPeopleStaticText, numberOfPeopleTextView)
  • DefaultText Π·Π° numberOfPeopleTextView (трябва Π΄Π° бъдС 4).

БъздаванС Π½Π° ΠΊΠ°Π»ΠΊΡƒΠ»Π°Ρ‚ΠΎΡ€ Π·Π° бакшиши Π½Π° Kotlin: ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚ΠΈ Ρ‚ΠΎΠ²Π°?

Π‘Π΅Π³Π°, ΠΊΠΎΠ³Π°Ρ‚ΠΎ стартирамС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ, ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈΠΌ сумата Π½Π° смСтката, Π° Π±ΡƒΡ‚ΠΎΠ½ΠΈΡ‚Π΅ β€žΠ”ΠΎΠ±Π°Π²ΠΈ/Π˜Π·Π²Π°Π΄ΠΈβ€œ работят, Π½ΠΎ всС ΠΎΡ‰Π΅ Π½ΠΈΡ‰ΠΎ Π½Π΅ сС случва.

ДобавямС Views

ΠžΡ‚Π²Π°Ρ€ΡΠΌΠ΅ MainActivity.kt ΠΈ добавямС Ρ‚ΠΎΠ²Π° Π² функцията initViews (#6):

private fun initViews() {
        expensePerPersonTextView = findViewById(R.id.expensePerPersonTextView)
        billEditText = findViewById(R.id.billEditText)
 
addTipButton = findViewById(R.id.addTipButton)
        tipTextView = findViewById(R.id.tipTextView)
        subtractTipButton = findViewById(R.id.subtractTipButton)
 
addPeopleButton = findViewById(R.id.addPeopleButton)
        numberOfPeopleTextView = findViewById(R.id.numberOfPeopleTextView)
        subtractPeopleButton = findViewById(R.id.subtractPeopleButton)
 
//TODO #8: Π‘Π²ΡŠΡ€Π·Π²Π°Π½Π΅ Π½Π° Π±ΡƒΡ‚ΠΎΠ½ΠΈΡ‚Π΅ с Listener
 
//TODO #16: Π‘Π²ΡŠΡ€Π·Π²Π°Π½Π΅ Π½Π° EditText с TextWatcher
 
}

Π—Π°Π²ΡŠΡ€ΡˆΠ²Π°ΠΌΠ΅ Π±ΡƒΡ‚ΠΎΠ½ΠΈΡ‚Π΅

Π—Π° Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π·Π° кликвания Π½Π° Π±ΡƒΡ‚ΠΎΠ½ΠΈΡ‚Π΅, внСдрявамС View.OnClickListener Π½Π° Π½ΠΈΠ²ΠΎ клас (#7):

class MainActivity: AppCompatActivity(), View.OnClickListener {

НС ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π°ΠΌΠ΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°, трябва Π΄Π° ΠΈΠ·Π²ΡŠΡ€ΡˆΠΈΠΌ ΠΎΡ‰Π΅ няколко дСйствия (#8):

override fun onClick(v: View?) {
        when (v?.id) {
            R.id.addTipButton -> incrementTip()
            R.id.subtractTipButton -> decrementTip()
            R.id.addPeopleButton -> incrementPeople()
            R.id.subtractPeopleButton -> decrementPeople()
        }
    }

Π’ частта с Π±ΡƒΡ‚ΠΎΠ½ΠΈΡ‚Π΅ ΠΈ ΠΏΡ€Π΅Π²ΠΊΠ»ΡŽΡ‡Π²Π°Ρ‚Π΅Π»ΠΈΡ‚Π΅ Kotlin Π΅ ΠΌΠ½ΠΎΠ³ΠΎ Π΄ΠΎΠ±Ρ€Π΅ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΈΡ€Π°Π½ΠΎ! ДобавямС слСдния ΠΊΠΎΠ΄ Π² всички Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ increment ΠΈ decrement
(#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: Π‘Π²ΡŠΡ€ΠΆΠΈ EditText с TextWatcher
}

БъздаванС Π½Π° ΠΊΠ°Π»ΠΊΡƒΠ»Π°Ρ‚ΠΎΡ€ Π·Π° бакшиши Π½Π° Kotlin: ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚ΠΈ Ρ‚ΠΎΠ²Π°?

Π‘Π΅Π³Π° ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° добавямС общия Ρ€Π°Π·Ρ…ΠΎΠ΄, Π±Π°ΠΊΡˆΠΈΡˆΠΈΡ‚Π΅ ΠΈ броя Π½Π° участницитС Π² срСщата. И Π½Π°ΠΉ-Π²Π°ΠΆΠ½ΠΎΡ‚ΠΎ...

Π Π°Π·Π΄Π΅Π» Π·Π° изчисляванС Π½Π° Ρ€Π°Π·Ρ…ΠΎΠ΄ΠΈΡ‚Π΅

Π’ΠΎΠ·ΠΈ ΠΊΠΎΠ΄ изчислява Ρ€Π°Π·Ρ…ΠΎΠ΄ΠΈΡ‚Π΅ (#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(this)

Π‘ΡŠΡ‰ΠΎ добавямС ΠΊΠΎΠ΄ Π·Π° изпълнСниС Π½Π° 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) {}

БъздаванС Π½Π° ΠΊΠ°Π»ΠΊΡƒΠ»Π°Ρ‚ΠΎΡ€ Π·Π° бакшиши Π½Π° Kotlin: ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚ΠΈ Ρ‚ΠΎΠ²Π°?

А сСга всичко Ρ€Π°Π±ΠΎΡ‚ΠΈ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎ! ΠŸΠΎΠ·Π΄Ρ€Π°Π²Π»Π΅Π½ΠΈΡ, написали стС собствСн "ΠšΠ°Π»ΠΊΡƒΠ»Π°Ρ‚ΠΎΡ€ Π½Π° бакшиши" Π½Π° Kotlin.

БъздаванС Π½Π° ΠΊΠ°Π»ΠΊΡƒΠ»Π°Ρ‚ΠΎΡ€ Π·Π° бакшиши Π½Π° Kotlin: ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚ΠΈ Ρ‚ΠΎΠ²Π°?

Skillbox ΠΏΡ€Π΅ΠΏΠΎΡ€ΡŠΡ‡Π²Π°:

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: habr.com

ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС с Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ πŸ”₯ ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС с Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ | ProHoster