Π˜Π·Π³Ρ€Π°Π΄Π±Π° Π½Π° ΠΊΠ°Π»ΠΊΡƒΠ»Π°Ρ‚ΠΎΡ€ Π·Π° бакшиш Π²ΠΎ ΠšΠΎΡ‚Π»ΠΈΠ½: ΠΊΠ°ΠΊΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡ€Π°?

Π˜Π·Π³Ρ€Π°Π΄Π±Π° Π½Π° ΠΊΠ°Π»ΠΊΡƒΠ»Π°Ρ‚ΠΎΡ€ Π·Π° бакшиш Π²ΠΎ ΠšΠΎΡ‚Π»ΠΈΠ½: ΠΊΠ°ΠΊΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡ€Π°?

Π’ΠΈ ΠΏΠΎΠΊΠ°ΠΆΡƒΠ²Π°ΠΌΠ΅ ΠΊΠ°ΠΊΠΎ Π΄Π° ΠΊΡ€Π΅ΠΈΡ€Π°Ρ‚Π΅ Сдноставна Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π° Π·Π° прСсмСтка Π½Π° бакшиш Π²ΠΎ ΠšΠΎΡ‚Π»ΠΈΠ½. Π”Π° Π±ΠΈΠ΄Π°ΠΌ ΠΏΠΎΠΏΡ€Π΅Ρ†ΠΈΠ·Π΅Π½, Kotlin 1.3.21, Android 4, Android Studio 3. Π‘Ρ‚Π°Ρ‚ΠΈΡ˜Π°Ρ‚Π° ќС Π±ΠΈΠ΄Π΅ интСрСсна, ΠΏΡ€Π΅Π΄ сС, Π·Π° ΠΎΠ½ΠΈΠ΅ ΠΊΠΎΠΈ Π³ΠΎ Π·Π°ΠΏΠΎΡ‡Π½ΡƒΠ²Π°Π°Ρ‚ своСто ΠΏΠ°Ρ‚ΡƒΠ²Π°ΡšΠ΅ Π²ΠΎ Ρ€Π°Π·Π²ΠΈΠ²Π°ΡšΠ΅ Π½Π° Android Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈ. Π’ΠΈ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡƒΠ²Π° Π΄Π° Ρ€Π°Π·Π±Π΅Ρ€Π΅Ρ‚Π΅ ΡˆΡ‚ΠΎ ΠΈ ΠΊΠ°ΠΊΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡ€Π° Π²Π½Π°Ρ‚Ρ€Π΅ Π²ΠΎ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π°Ρ‚Π°.

Π’Π°ΠΊΠ²ΠΈΠΎΡ‚ ΠΊΠ°Π»ΠΊΡƒΠ»Π°Ρ‚ΠΎΡ€ Π΅ корисСн ΠΊΠΎΠ³Π° Ρ‚Ρ€Π΅Π±Π° Π΄Π° ја прСсмСтатС ΠΊΠΎΠ»ΠΈΡ‡ΠΈΠ½Π°Ρ‚Π° Π½Π° бакшиш ΠΎΠ΄ компанија ΡˆΡ‚ΠΎ ќС ΠΎΠ΄Π»ΡƒΡ‡ΠΈ Π΄Π° ΠΏΠΎΠΌΠΈΠ½Π΅ Π²Ρ€Π΅ΠΌΠ΅ Π²ΠΎ рСсторан ΠΈΠ»ΠΈ ΠΊΠ°Ρ„ΡƒΠ»Π΅. Π‘Π΅ Ρ€Π°Π·Π±ΠΈΡ€Π°, Π½Π΅ сСкој ΠΈ Π½Π΅ сСкогаш остава Ρ‡Π°Ρ˜ Π·Π° ΠΊΠ΅Π»Π½Π΅Ρ€ΠΈΡ‚Π΅, ΠΎΠ²Π° Π΅ повСќС Π·Π°ΠΏΠ°Π΄Π½Π° Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΡ˜Π°, Π½ΠΎ процСсот Π½Π° Ρ€Π°Π·Π²ΠΎΡ˜ Π½Π° Ρ‚Π°ΠΊΠ²Π° Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π° Π΅ интСрСсСн Π²ΠΎ сСкој ΡΠ»ΡƒΡ‡Π°Ρ˜.

ΠŸΠΎΡ‚ΡΠ΅Ρ‚ΡƒΠ²Π°ΠΌΠ΅: Π·Π° ситС Ρ‡ΠΈΡ‚Π°Ρ‚Π΅Π»ΠΈ Π½Π° β€žΠ₯Π°Π±Ρ€β€œ - попуст ΠΎΠ΄ 10 Ρ€ΡƒΠ±Π»ΠΈ ΠΏΡ€ΠΈ Π·Π°ΠΏΠΈΡˆΡƒΠ²Π°ΡšΠ΅ Π½Π° кој Π±ΠΈΠ»ΠΎ курс Skillbox ΠΊΠΎΡ€ΠΈΡΡ‚Π΅Ρ˜ΡœΠΈ Π³ΠΎ ΠΏΡ€ΠΎΠΌΠΎΡ‚ΠΈΠ²Π½ΠΈΠΎΡ‚ ΠΊΠΎΠ΄ β€žΠ₯Π°Π±Ρ€β€œ.

Skillbox ΠΏΡ€Π΅ΠΏΠΎΡ€Π°Ρ‡ΡƒΠ²Π°: ΠŸΡ€Π°ΠΊΡ‚ΠΈΡ‡Π΅Π½ курс β€žMobile Developer PRO.

Π•Π²Π΅ ΠΊΠ°ΠΊΠΎ ΠΈΠ·Π³Π»Π΅Π΄Π° Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π°Ρ‚Π° ΠΊΠΎΠ³Π° Ρ€Π°Π±ΠΎΡ‚ΠΈ:

Π˜Π·Π³Ρ€Π°Π΄Π±Π° Π½Π° ΠΊΠ°Π»ΠΊΡƒΠ»Π°Ρ‚ΠΎΡ€ Π·Π° бакшиш Π²ΠΎ ΠšΠΎΡ‚Π»ΠΈΠ½: ΠΊΠ°ΠΊΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡ€Π°?

Π“ΠΎ внСсуватС саканиот ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚ ΠΎΠ΄ Π²ΠΊΡƒΠΏΠ½ΠΈΠΎΡ‚ износ, Π±Ρ€ΠΎΡ˜ΠΎΡ‚ Π½Π° учСсници Π½Π° состанокот ΠΈ Π³ΠΎ Π΄ΠΎΠ±ΠΈΠ²Π°Ρ‚Π΅ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΎΡ‚ - ΠΊΠΎΠ»ΠΈΡ‡ΠΈΠ½Π°Ρ‚Π° Π½Π° Π±Π°ΠΊΡˆΠΈΡˆΠΎΡ‚ ΡˆΡ‚ΠΎ Ρ‚Ρ€Π΅Π±Π° Π΄Π° сС остави.

Π”Π° Π·Π°ΠΏΠΎΡ‡Π½Π΅ΠΌΠ΅

ЦСлосниот ΠΈΠ½Ρ‚Π΅Ρ€Ρ„Π΅Ρ˜Ρ Π½Π° Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π°Ρ‚Π° ΠΈΠ·Π³Π»Π΅Π΄Π° Π²Π°ΠΊΠ°:
Π˜Π·Π³Ρ€Π°Π΄Π±Π° Π½Π° ΠΊΠ°Π»ΠΊΡƒΠ»Π°Ρ‚ΠΎΡ€ Π·Π° бакшиш Π²ΠΎ ΠšΠΎΡ‚Π»ΠΈΠ½: ΠΊΠ°ΠΊΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡ€Π°?

Π˜Π·Π³Ρ€Π°Π΄Π±Π° Π½Π° ΠΊΠ°Π»ΠΊΡƒΠ»Π°Ρ‚ΠΎΡ€ Π·Π° бакшиш Π²ΠΎ ΠšΠΎΡ‚Π»ΠΈΠ½: ΠΊΠ°ΠΊΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡ€Π°?

ΠŸΡ€Π²Π°Ρ‚Π° Π°ΠΊΡ†ΠΈΡ˜Π° - ΠΏΡ€Π΅Π·Π΅ΠΌΠ°ΡšΠ΅ Π½Π° Π±Π°Π·Π°Ρ‚Π° Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΡ‚. ΠžΡ‚Π²ΠΎΡ€Π΅Ρ‚Π΅ Π³ΠΎ Π²ΠΎ Android Studio 3.0 ΠΈΠ»ΠΈ ΠΏΠΎΠ½ΠΎΠ²Π° Π²Π΅Ρ€Π·ΠΈΡ˜Π°. НиС Π³ΠΎ Π³Ρ€Π°Π΄ΠΈΠΌΠ΅ ΠΈ Ρ€Π°Π±ΠΎΡ‚ΠΈΠΌΠ΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΡ‚ ΠΈ Π³Π»Π΅Π΄Π°ΠΌΠ΅ Π±Π΅Π» Π΅ΠΊΡ€Π°Π½. Π‘Γ¨ Π΅ Π²ΠΎ Ρ€Π΅Π΄, ΠΊΠ°ΠΊΠΎ ΡˆΡ‚ΠΎ Ρ‚Ρ€Π΅Π±Π° Π΄Π° Π±ΠΈΠ΄Π΅.

Π˜Π·Π³Ρ€Π°Π΄Π±Π° Π½Π° ΠΊΠ°Π»ΠΊΡƒΠ»Π°Ρ‚ΠΎΡ€ Π·Π° бакшиш Π²ΠΎ ΠšΠΎΡ‚Π»ΠΈΠ½: ΠΊΠ°ΠΊΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡ€Π°?

Π˜Π·Π³Ρ€Π°Π΄Π±Π° Π½Π° ΠΊΠ°Π»ΠΊΡƒΠ»Π°Ρ‚ΠΎΡ€ Π·Π° бакшиш Π²ΠΎ ΠšΠΎΡ‚Π»ΠΈΠ½: ΠΊΠ°ΠΊΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡ€Π°?

Π”Π΅Ρ˜ΡΡ‚Π²Π°Ρ‚Π° Π½Π° корисницитС сС напишани Π²ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΡ‚ ΠΏΠΎ Ρ…Ρ€ΠΎΠ½ΠΎΠ»ΠΎΡˆΠΊΠΈ рСдослСд, Ρ‚Π°ΠΊΠ° ΡˆΡ‚ΠΎ сè Π΅ јасно. Π—Π° Π΄Π° Π³ΠΎ Π²ΠΈΠ΄ΠΈΡ‚Π΅, ΠΎΡ‚Π²ΠΎΡ€Π΅Ρ‚Π΅ View -> Tool Windows -> TODO.

Π“ΠΎ ΠΏΡ€ΠΎΡƒΡ‡ΡƒΠ²Π°ΠΌΠ΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΡ‚ ΠΈ ΠΎΡ‚Π²ΠΎΡ€Π°ΠΌΠ΅ Π±ΠΎΠΈ.xml Π·Π° Π΄Π° ја ΠΎΡ†Π΅Π½ΠΈΠΌΠ΅ ΠΏΠ°Π»Π΅Ρ‚Π°Ρ‚Π° Π½Π° Π±ΠΎΠΈ. strings.xml содрТи тСкстуални ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ (наслови), Π° styles.xml содрТи Π½Π΅ΠΊΠΎΠ»ΠΊΡƒ шаблони Π·Π° Ρ„ΠΎΠ½Ρ‚ΠΎΠ²ΠΈ.

Развој Π½Π° Π΄Π΅Π»ΠΎΡ‚ Π·Π° Ρ‚Ρ€ΠΎΡˆΠΎΡ†ΠΈ

ΠžΡ‚Π²ΠΎΡ€Π΅Ρ‚Π΅ Π³ΠΎ activity_main.xml ΠΈ Π΄ΠΎΠ΄Π°Ρ˜Ρ‚Π΅ Π³ΠΎ ΠΊΠΎΠ΄ΠΎΡ‚ ΠΏΠΎΠ΄ΠΎΠ»Ρƒ Π²ΠΎ LinearLayout (#1):

<TextView
    android_id="@+id/expensePerPersonTextView"
    android_layout_width="match_parent"
    android_layout_height="wrap_content"
    android_paddingTop="30dp"
    style="@style/h1Bold"
    android_textColor="@color/colorAccent"
    android_text="0"/>
 
<TextView
    android_layout_width="match_parent"
    android_layout_height="wrap_content"
    android_paddingBottom="25dp"
    style="@style/h2"
    android_textColor="@color/colorAccent"
    android_text="@string/perPersonStaticText"/>

Π‘Π΅Π³Π° ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π³ΠΎ стилизиратС Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡƒΠΌΠΎΡ‚ со врСдности ΠΈΠ»ΠΈ Π΄Π° ΠΈΠ³Ρ€Π°Ρ‚Π΅ со Π±ΠΎΠΈ ΠΊΠΎΡ€ΠΈΡΡ‚Π΅Ρ˜ΡœΠΈ Material.io Π°Π»Π°Ρ‚ΠΊΠ°.

Π‘Π΅Π³Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΡ‚ ΠΈΠ·Π³Π»Π΅Π΄Π° Π²Π°ΠΊΠ°:

Π˜Π·Π³Ρ€Π°Π΄Π±Π° Π½Π° ΠΊΠ°Π»ΠΊΡƒΠ»Π°Ρ‚ΠΎΡ€ Π·Π° бакшиш Π²ΠΎ ΠšΠΎΡ‚Π»ΠΈΠ½: ΠΊΠ°ΠΊΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡ€Π°?
Како ΡˆΡ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π²ΠΈΠ΄ΠΈΡ‚Π΅, прСсмСтката Π½Π° Ρ‚Ρ€ΠΎΡˆΠΎΡ†ΠΈΡ‚Π΅ сС Π±Π°Π·ΠΈΡ€Π° Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈΡ‚Π΅ внСсСни ΠΎΠ΄ корисникот.

Развој Π½Π° Π΄Π΅Π»ΠΎΡ‚ Π·Π° смСтка

Π”ΠΎΠ΄Π°Ρ˜Ρ‚Π΅ Π³ΠΎ ΠΊΠΎΠ΄ΠΎΡ‚ ΠΏΠΎΠ΄ΠΎΠ»Ρƒ Π²ΠΎ LinearLayout ΠΏΠΎ Π΄Π΅Π»ΠΎΡ‚ Π·Π° Ρ‚Ρ€ΠΎΡˆΠΎΡ†ΠΈ (#2):

<LinearLayout
    android_layout_width="match_parent"
    android_layout_height="match_parent"
    android_orientation="vertical"
    android_background="@color/colorAccent">
 
<! β€” TODO #3: Build Bill Section β†’
 
… 
</LinearLayout>

Π—Π°Ρ‚Π²ΠΎΡ€Π΅Ρ‚Π΅ Π³ΠΎ LinearLayout ΠΏΠΎ списокот TODOs, Π° ΠΏΠΎΡ‚ΠΎΠ° Π΄ΠΎΠ΄Π°Π΄Π΅Ρ‚Π΅ Π³ΠΎ Π½ΠΎΠ²ΠΈΠΎΡ‚ ΠΊΠΎΠ΄, ΡΡ‚Π°Π²Π°Ρ˜ΡœΠΈ Π³ΠΎ Π²ΠΎ LinearLayout (#3):

<TextView
      android_layout_margin="15dp"
      android_layout_width="match_parent"
      android_layout_height="wrap_content"
      android_textColor="@color/colorWhite"
      style="@style/h4"
      android_text="@string/billStaticText"/>
 
<EditText
      android_id="@+id/billEditText"
      android_layout_width="match_parent"
      android_layout_height="wrap_content"
      android_textColor="@color/colorWhite"
      android_inputType="numberDecimal"
      android_maxLines="1"
      style="@style/h2Bold"
      android_text="0"/>

Π‘ΠΈΠ΄Π΅Ρ˜ΡœΠΈ Π³Π»Π°Π²Π½Π°Ρ‚Π° Π·Π°Π΄Π°Ρ‡Π° Π½Π° Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π°Ρ‚Π° Π΅ Π΄Π° Π³ΠΈ прСсмСта ΠΈΠ½Π΄ΠΈΠ²ΠΈΠ΄ΡƒΠ°Π»Π½ΠΈΡ‚Π΅ Ρ‚Ρ€ΠΎΡˆΠΎΡ†ΠΈ Π·Π° сСкој ΠΎΠ΄ учСсницитС Π½Π° собиритС Π²ΠΎ рСсторанот, Π³Π»Π°Π²Π½Π°Ρ‚Π° ΡƒΠ»ΠΎΠ³Π° ја ΠΈΠ³Ρ€Π° costPerPersonTextView.

EditText Π³ΠΎ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΡƒΠ²Π° Π²Π½Π΅ΡΡƒΠ²Π°ΡšΠ΅Ρ‚ΠΎ Π½Π° Π΅Π΄Π½Π° линија, овој ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Π°Ρ€ ΠΌΠΎΡ€Π° Π΄Π° Π±ΠΈΠ΄Π΅ поставСн Π½Π° NumberDecimal inputType.

Π˜Π·Π³Ρ€Π°Π΄Π±Π° Π½Π° ΠΊΠ°Π»ΠΊΡƒΠ»Π°Ρ‚ΠΎΡ€ Π·Π° бакшиш Π²ΠΎ ΠšΠΎΡ‚Π»ΠΈΠ½: ΠΊΠ°ΠΊΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡ€Π°?
Π“ΠΎ Π·Π°ΠΏΠΎΡ‡Π½ΡƒΠ²Π°ΠΌΠ΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΡ‚ Π·Π° тСстот ΠΈ Π³ΠΈ внСсувамС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΡ‚Π΅ Π½Π° Π²ΠΊΡƒΠΏΠ½Π°Ρ‚Π° ΡˆΡ‚Π΅Ρ‚Π° (ΡΠΊΡ€ΡˆΠ΅Π½ΠΈ Ρ‡Π°ΡˆΠΈ, Ρ‡ΠΈΠ½ΠΈΠΈ ΠΈΡ‚Π½.)

Развој Π½Π° Π΄Π΅Π»ΠΎΡ‚ β€žΠ›ΡƒΡ“Π΅ ΠΈ ΡΠΎΠ²Π΅Ρ‚ΠΈβ€œ.

Π—Π° Π΄Π° Π΄ΠΎΠ΄Π°Π΄Π΅Ρ‚Π΅ ΠΈΠ·Π±ΠΈΡ€Π°Ρ‡ Π½Π° износот Π½Π° Π±Π°ΠΊΡˆΠΈΡˆΠΎΡ‚, Π·Π°Π»Π΅ΠΏΠ΅Ρ‚Π΅ Π³ΠΎ ΠΊΠΎΠ΄ΠΎΡ‚ ΠΏΠΎΠ΄ΠΎΠ»Ρƒ Π²ΠΎ Π½ΠΎΠ² Π΄Π΅Π» LinearLayout (#4):

<TextView
      android_layout_margin="15dp"
      android_layout_width="match_parent"
      android_layout_height="wrap_content"
      android_textColor="@color/colorWhite"
      style="@style/h4"
      android_text="@string/tipStaticText"/>
 
<LinearLayout
      android_layout_width="match_parent"
      android_layout_height="wrap_content"
      android_orientation="horizontal">
 
<ImageButton
        android_id="@+id/subtractTipButton"
        style="@style/operationButton"
        android_layout_marginLeft="20dp"
        android_layout_marginStart="20dp"
        android_src="@drawable/subtract"/>
 
<TextView
        android_id="@+id/tipTextView"
        android_layout_margin="15dp"
        android_layout_width="0dp"
        android_layout_height="wrap_content"
        android_textColor="@color/colorWhite"
        android_layout_weight="1"
        style="@style/h2Bold"
        android_text="20%"/>
 
<ImageButton
        android_id="@+id/addTipButton"
        style="@style/operationButton"
        android_layout_marginEnd="20dp"
        android_layout_marginRight="20dp"
        android_src="@drawable/add"/>
 
</LinearLayout>

Овој Π΄Π΅Π» ΠΎΠ΄ ΠΊΠΎΠ΄ΠΎΡ‚ Π΅ ΠΏΠΎΡ‚Ρ€Π΅Π±Π΅Π½ Π·Π° ΠΏΡ€Π΅Ρ†ΠΈΠ·Π½ΠΎ ΠΏΡ€Π΅ΡΠΌΠ΅Ρ‚ΡƒΠ²Π°ΡšΠ΅ Π½Π° износот Π½Π° Π±Π°ΠΊΡˆΠΈΡˆΠΎΡ‚. Π‘Ρ‚Π°Π½Π΄Π°Ρ€Π΄Π½Π°Ρ‚Π° врСдност Π½Π° тСкстот Π΅ 20. ΠšΠΎΠΏΡ‡ΠΈΡšΠ°Ρ‚Π° Π·Π° слика сС ΠΎΠ±Π΅Π·Π±Π΅Π΄Π΅Π½ΠΈ со ΠΈΠΊΠΎΠ½ΠΈ Π²ΠΎ ΠΏΠ°ΠΏΠΊΠ° со Π΄ΠΎΠ·Π²ΠΎΠ»ΠΈ Π·Π° ΠΏΠΈΡˆΡƒΠ²Π°ΡšΠ΅.

ΠšΠΎΠΏΠΈΡ€Π°Ρ˜Ρ‚Π΅ Π³ΠΎ Ρ†Π΅Π»ΠΈΠΎΡ‚ Π΄Π΅Π» ΠΈ Π΄ΠΎΠ΄Π°Ρ˜Ρ‚Π΅ Π³ΠΎ слСдново (#5):

  • Π˜Π΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΈ Π½Π° ΠΊΠΎΠΏΡ‡ΠΈΡšΠ°Ρ‚Π° Π·Π° слики (ΠΎΠ΄Π·Π΅ΠΌΠ΅Ρ‚Π΅ Π³ΠΎ ΠΊΠΎΠΏΡ‡Π΅Ρ‚ΠΎ Π·Π° Π»ΡƒΡ“Π΅, Π΄ΠΎΠ΄Π°Π΄Π΅Ρ‚Π΅ Π³ΠΎ ΠΊΠΎΠΏΡ‡Π΅Ρ‚ΠΎ Π·Π° Π»ΡƒΡ“Π΅)
  • TextView ID (numberOfPeopleStaticText, numberOfPeopleTextView)
  • Π‘Ρ‚Π°Π½Π΄Π°Ρ€Π΄Π΅Π½ тСкст Π·Π° numberOfPeopleTextView (Ρ‚Ρ€Π΅Π±Π° Π΄Π° Π±ΠΈΠ΄Π΅ 4).

Π˜Π·Π³Ρ€Π°Π΄Π±Π° Π½Π° ΠΊΠ°Π»ΠΊΡƒΠ»Π°Ρ‚ΠΎΡ€ Π·Π° бакшиш Π²ΠΎ ΠšΠΎΡ‚Π»ΠΈΠ½: ΠΊΠ°ΠΊΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡ€Π°?

Π‘Π΅Π³Π°, ΠΏΡ€ΠΈ ΡΡ‚Π°Ρ€Ρ‚ΡƒΠ²Π°ΡšΠ΅ Π½Π° Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π°Ρ‚Π°, ΠΌΠΎΠΆΠ½ΠΎ Π΅ Π΄Π° сС Π΄ΠΎΠ΄Π°Π΄Π΅ износот Π½Π° Ρ„Π°ΠΊΡ‚ΡƒΡ€Π°Ρ‚Π°, Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ ΠΈ ΠΊΠΎΠΏΡ‡ΠΈΡšΠ°Ρ‚Π° Π”ΠΎΠ΄Π°Ρ˜/ОдзСми, Π½ΠΎ засСга Π½ΠΈΡˆΡ‚ΠΎ Π½Π΅ сС случува.

Π”ΠΎΠ΄Π°Π΄Π΅Ρ‚Π΅ ΠΏΡ€Π΅Π³Π»Π΅Π΄ΠΈ

ΠžΡ‚Π²ΠΎΡ€Π΅Ρ‚Π΅ 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: Bind Buttons to Listener
 
//TODO #16: Bind EditText to TextWatcher
 
}

Π—Π°Π²Ρ€ΡˆΡƒΠ²Π°ΡšΠ΅ Π½Π° ΠΊΠΎΠΏΡ‡ΠΈΡšΠ°Ρ‚Π°

Π—Π° Π΄Π° Π΄ΠΎΠ΄Π°Π΄Π΅Ρ‚Π΅ ΠΏΠΎΠ΄Π΄Ρ€ΡˆΠΊΠ° Π·Π° кликањС Π½Π° ΠΊΠΎΠΏΡ‡ΠΈΡšΠ°Ρ‚Π°, ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚ΠΈΡ€Π°Ρ˜Ρ‚Π΅ View.OnClickListener Π½Π° Π½ΠΈΠ²ΠΎ Π½Π° класа (#7):

класа 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()
        }
    }

Π’ΠΎ однос Π½Π° ΠΊΠΎΠΏΡ‡ΠΈΡšΠ°Ρ‚Π° ΠΈ ΠΏΡ€Π΅ΠΊΠΈΠ½ΡƒΠ²Π°Ρ‡ΠΈΡ‚Π΅, ΠšΠΎΡ‚Π»ΠΈΠ½ ΠΈΠΌΠ° сè ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΈΡ€Π°Π½ΠΎ ΠΌΠ½ΠΎΠ³Ρƒ ΠΊΡƒΠ»! Π”ΠΎΠ΄Π°Π΄Π΅Ρ‚Π΅ Π³ΠΎ ΠΊΠΎΠ΄ΠΎΡ‚ ΠΏΠΎΠ΄ΠΎΠ»Ρƒ Π½Π° ситС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π·Π° Π·Π³ΠΎΠ»Π΅ΠΌΡƒΠ²Π°ΡšΠ΅ ΠΈ Π½Π°ΠΌΠ°Π»ΡƒΠ²Π°ΡšΠ΅
(#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):

класа MainActivity: AppCompatActivity(), View.OnClickListener, TextWatcher {

ΠŸΠΎΡ‚ΠΎΠ° Π³ΠΎ Π²Π³Ρ€Π°Π΄ΡƒΠ²Π°ΠΌΠ΅ ΡΠ»ΡƒΡˆΠ°Ρ‚Π΅Π»ΠΎΡ‚ billEditText (#17):

billEditText.addTextChangedListener(ΠΎΠ²Π°)

ΠŸΠ»ΡƒΡ Π΄ΠΎΠ΄Π°Π΄Π΅Ρ‚Π΅ ΠΊΠΎΠ΄ Π·Π° Π΄Π° сС ΠΈΠ·Π²Ρ€ΡˆΠΈ 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) {}

Π˜Π·Π³Ρ€Π°Π΄Π±Π° Π½Π° ΠΊΠ°Π»ΠΊΡƒΠ»Π°Ρ‚ΠΎΡ€ Π·Π° бакшиш Π²ΠΎ ΠšΠΎΡ‚Π»ΠΈΠ½: ΠΊΠ°ΠΊΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡ€Π°?

Па, сСга сè Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡ€Π°! ЧСститки, Π½Π°ΠΏΠΈΡˆΠ°Π²Ρ‚Π΅ свој β€žΠšΠ°Π»ΠΊΡƒΠ»Π°Ρ‚ΠΎΡ€ Π·Π° Π±Π°ΠΊΡˆΠΈΡˆβ€œ Π²ΠΎ ΠšΠΎΡ‚Π»ΠΈΠ½.

Π˜Π·Π³Ρ€Π°Π΄Π±Π° Π½Π° ΠΊΠ°Π»ΠΊΡƒΠ»Π°Ρ‚ΠΎΡ€ Π·Π° бакшиш Π²ΠΎ ΠšΠΎΡ‚Π»ΠΈΠ½: ΠΊΠ°ΠΊΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡ€Π°?

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

Π˜Π·Π²ΠΎΡ€: www.habr.com

Π”ΠΎΠ΄Π°Π΄Π΅Ρ‚Π΅ ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€