БъздаванС Π½Π° ΠΊΠ°Π»ΠΊΡƒΠ»Π°Ρ‚ΠΎΡ€ Π½Π° бакшиши Π½Π° 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 ΠΈΠ»ΠΈ ΠΏΠΎ-късно. Π˜Π·Π³Ρ€Π°ΠΆΠ΄Π°ΠΌΠ΅ ΠΈ стартирамС ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ΠΈ Π²ΠΈΠΆΠ΄Π°ΠΌΠ΅ бял Π΅ΠΊΡ€Π°Π½. Всичко Π΅ Π½Π°Ρ€Π΅Π΄, Ρ‚Π°ΠΊΠ° ΠΈ трябва Π΄Π° бъдС.

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

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

ДСйствията Π½Π° потрСбитСля са записани Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π² Ρ…Ρ€ΠΎΠ½ΠΎΠ»ΠΎΠ³ΠΈΡ‡Π΅Π½ Ρ€Π΅Π΄, Π·Π° Π΄Π° бъдС всичко ясно. Π—Π° Π΄Π° Π³ΠΎ ΠΏΡ€Π΅Π³Π»Π΅Π΄Π°Ρ‚Π΅, ΠΎΡ‚Π²ΠΎΡ€Π΅Ρ‚Π΅ View -> Tool Windows -> TODO.

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

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

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

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

Π’ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΡŠΡ‚ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° Ρ‚Π°ΠΊΠ°:

БъздаванС Π½Π° ΠΊΠ°Π»ΠΊΡƒΠ»Π°Ρ‚ΠΎΡ€ Π½Π° бакшиши Π½Π° Kotlin: ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚ΠΈ?
ΠšΠ°ΠΊΡ‚ΠΎ Π²ΠΈΠΆΠ΄Π°Ρ‚Π΅, Ρ€Π°Π·Ρ…ΠΎΠ΄ΠΈΡ‚Π΅ сС изчисляват въз основа Π½Π° Π΄Π°Π½Π½ΠΈΡ‚Π΅, ΠΊΠΎΠΈΡ‚ΠΎ въвСТда потрСбитСлят.

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° Ρ€Π°Π·Π΄Π΅Π»Π° смСтки

ДобавямС ΠΊΠΎΠ΄Π°, Ρ€Π°Π·ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ ΠΏΠΎ-Π΄ΠΎΠ»Ρƒ, Π² LinearLayout слСд Expense Section (#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: БвязываСм ΠΊΠ½ΠΎΠΏΠΊΠΈ с ΡΠ»ΡƒΡˆΠ°Ρ‚Π΅Π»Π΅ΠΌ
 
//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 всичко Π΅ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΈΡ€Π°Π½ΠΎ ΠΌΠ½ΠΎΠ³ΠΎ Π΄ΠΎΠ±Ρ€Π΅! ДобавямС слСдния ΠΊΠΎΠ΄ във всички Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π·Π° ΡƒΠ²Π΅Π»ΠΈΡ‡Π°Π²Π°Π½Π΅ ΠΈ намаляванС
(#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