ΠΠΈ ΠΏΠΎΠΊΠ°ΠΆΡΠ²Π°ΠΌΠ΅ ΠΊΠ°ΠΊΠΎ Π΄Π° ΠΊΡΠ΅ΠΈΡΠ°ΡΠ΅ Π΅Π΄Π½ΠΎΡΡΠ°Π²Π½Π° Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ° Π·Π° ΠΏΡΠ΅ΡΠΌΠ΅ΡΠΊΠ° Π½Π° Π±Π°ΠΊΡΠΈΡ Π²ΠΎ ΠΠΎΡΠ»ΠΈΠ½. ΠΠ° Π±ΠΈΠ΄Π°ΠΌ ΠΏΠΎΠΏΡΠ΅ΡΠΈΠ·Π΅Π½, Kotlin 1.3.21, Android 4, Android Studio 3. Π‘ΡΠ°ΡΠΈΡΠ°ΡΠ° ΡΠ΅ Π±ΠΈΠ΄Π΅ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½Π°, ΠΏΡΠ΅Π΄ ΡΠ΅, Π·Π° ΠΎΠ½ΠΈΠ΅ ΠΊΠΎΠΈ Π³ΠΎ Π·Π°ΠΏΠΎΡΠ½ΡΠ²Π°Π°Ρ ΡΠ²ΠΎΠ΅ΡΠΎ ΠΏΠ°ΡΡΠ²Π°ΡΠ΅ Π²ΠΎ ΡΠ°Π·Π²ΠΈΠ²Π°ΡΠ΅ Π½Π° Android Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΠΈ. ΠΠΈ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡΠ²Π° Π΄Π° ΡΠ°Π·Π±Π΅ΡΠ΅ΡΠ΅ ΡΡΠΎ ΠΈ ΠΊΠ°ΠΊΠΎ ΡΡΠ½ΠΊΡΠΈΠΎΠ½ΠΈΡΠ° Π²Π½Π°ΡΡΠ΅ Π²ΠΎ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ°ΡΠ°.
Π’Π°ΠΊΠ²ΠΈΠΎΡ ΠΊΠ°Π»ΠΊΡΠ»Π°ΡΠΎΡ Π΅ ΠΊΠΎΡΠΈΡΠ΅Π½ ΠΊΠΎΠ³Π° ΡΡΠ΅Π±Π° Π΄Π° ΡΠ° ΠΏΡΠ΅ΡΠΌΠ΅ΡΠ°ΡΠ΅ ΠΊΠΎΠ»ΠΈΡΠΈΠ½Π°ΡΠ° Π½Π° Π±Π°ΠΊΡΠΈΡ ΠΎΠ΄ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΡΠ° ΡΡΠΎ ΡΠ΅ ΠΎΠ΄Π»ΡΡΠΈ Π΄Π° ΠΏΠΎΠΌΠΈΠ½Π΅ Π²ΡΠ΅ΠΌΠ΅ Π²ΠΎ ΡΠ΅ΡΡΠΎΡΠ°Π½ ΠΈΠ»ΠΈ ΠΊΠ°ΡΡΠ»Π΅. Π‘Π΅ ΡΠ°Π·Π±ΠΈΡΠ°, Π½Π΅ ΡΠ΅ΠΊΠΎΡ ΠΈ Π½Π΅ ΡΠ΅ΠΊΠΎΠ³Π°Ρ ΠΎΡΡΠ°Π²Π° ΡΠ°Ρ Π·Π° ΠΊΠ΅Π»Π½Π΅ΡΠΈΡΠ΅, ΠΎΠ²Π° Π΅ ΠΏΠΎΠ²Π΅ΡΠ΅ Π·Π°ΠΏΠ°Π΄Π½Π° ΡΡΠ°Π΄ΠΈΡΠΈΡΠ°, Π½ΠΎ ΠΏΡΠΎΡΠ΅ΡΠΎΡ Π½Π° ΡΠ°Π·Π²ΠΎΡ Π½Π° ΡΠ°ΠΊΠ²Π° Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ° Π΅ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ΅Π½ Π²ΠΎ ΡΠ΅ΠΊΠΎΡ ΡΠ»ΡΡΠ°Ρ.
ΠΠΎΡΡΠ΅ΡΡΠ²Π°ΠΌΠ΅: Π·Π° ΡΠΈΡΠ΅ ΡΠΈΡΠ°ΡΠ΅Π»ΠΈ Π½Π° βΠ₯Π°Π±Ρβ - ΠΏΠΎΠΏΡΡΡ ΠΎΠ΄ 10 ΡΡΠ±Π»ΠΈ ΠΏΡΠΈ Π·Π°ΠΏΠΈΡΡΠ²Π°ΡΠ΅ Π½Π° ΠΊΠΎΡ Π±ΠΈΠ»ΠΎ ΠΊΡΡΡ Skillbox ΠΊΠΎΡΠΈΡΡΠ΅ΡΡΠΈ Π³ΠΎ ΠΏΡΠΎΠΌΠΎΡΠΈΠ²Π½ΠΈΠΎΡ ΠΊΠΎΠ΄ βΠ₯Π°Π±Ρβ.
Skillbox ΠΏΡΠ΅ΠΏΠΎΡΠ°ΡΡΠ²Π°: ΠΡΠ°ΠΊΡΠΈΡΠ΅Π½ ΠΊΡΡΡ
βMobile Developer PRO .
ΠΠ²Π΅ ΠΊΠ°ΠΊΠΎ ΠΈΠ·Π³Π»Π΅Π΄Π° Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ°ΡΠ° ΠΊΠΎΠ³Π° ΡΠ°Π±ΠΎΡΠΈ:
ΠΠΎ Π²Π½Π΅ΡΡΠ²Π°ΡΠ΅ ΡΠ°ΠΊΠ°Π½ΠΈΠΎΡ ΠΏΡΠΎΡΠ΅Π½Ρ ΠΎΠ΄ Π²ΠΊΡΠΏΠ½ΠΈΠΎΡ ΠΈΠ·Π½ΠΎΡ, Π±ΡΠΎΡΠΎΡ Π½Π° ΡΡΠ΅ΡΠ½ΠΈΡΠΈ Π½Π° ΡΠΎΡΡΠ°Π½ΠΎΠΊΠΎΡ ΠΈ Π³ΠΎ Π΄ΠΎΠ±ΠΈΠ²Π°ΡΠ΅ ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠΎΡ - ΠΊΠΎΠ»ΠΈΡΠΈΠ½Π°ΡΠ° Π½Π° Π±Π°ΠΊΡΠΈΡΠΎΡ ΡΡΠΎ ΡΡΠ΅Π±Π° Π΄Π° ΡΠ΅ ΠΎΡΡΠ°Π²ΠΈ.
ΠΠ° Π·Π°ΠΏΠΎΡΠ½Π΅ΠΌΠ΅
Π¦Π΅Π»ΠΎΡΠ½ΠΈΠΎΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΡΡ Π½Π° Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ°ΡΠ° ΠΈΠ·Π³Π»Π΅Π΄Π° Π²Π°ΠΊΠ°:
ΠΡΠ²Π°ΡΠ° Π°ΠΊΡΠΈΡΠ° -
ΠΠ΅ΡΡΡΠ²Π°ΡΠ° Π½Π° ΠΊΠΎΡΠΈΡΠ½ΠΈΡΠΈΡΠ΅ ΡΠ΅ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈ Π²ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠΎΡ ΠΏΠΎ Ρ
ΡΠΎΠ½ΠΎΠ»ΠΎΡΠΊΠΈ ΡΠ΅Π΄ΠΎΡΠ»Π΅Π΄, ΡΠ°ΠΊΠ° ΡΡΠΎ ΡΓ¨ Π΅ ΡΠ°ΡΠ½ΠΎ. ΠΠ° Π΄Π° Π³ΠΎ Π²ΠΈΠ΄ΠΈΡΠ΅, ΠΎΡΠ²ΠΎΡΠ΅ΡΠ΅ 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"/>
Π‘Π΅Π³Π° ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π³ΠΎ ΡΡΠΈΠ»ΠΈΠ·ΠΈΡΠ°ΡΠ΅ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡΠΌΠΎΡ ΡΠΎ Π²ΡΠ΅Π΄Π½ΠΎΡΡΠΈ ΠΈΠ»ΠΈ Π΄Π° ΠΈΠ³ΡΠ°ΡΠ΅ ΡΠΎ Π±ΠΎΠΈ ΠΊΠΎΡΠΈΡΡΠ΅ΡΡΠΈ
Π‘Π΅Π³Π° ΠΏΡΠΎΠ΅ΠΊΡΠΎΡ ΠΈΠ·Π³Π»Π΅Π΄Π° Π²Π°ΠΊΠ°:
ΠΠ°ΠΊΠΎ ΡΡΠΎ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π²ΠΈΠ΄ΠΈΡΠ΅, ΠΏΡΠ΅ΡΠΌΠ΅ΡΠΊΠ°ΡΠ° Π½Π° ΡΡΠΎΡΠΎΡΠΈΡΠ΅ ΡΠ΅ Π±Π°Π·ΠΈΡΠ° Π½Π° ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈΡΠ΅ Π²Π½Π΅ΡΠ΅Π½ΠΈ ΠΎΠ΄ ΠΊΠΎΡΠΈΡΠ½ΠΈΠΊΠΎΡ.
Π Π°Π·Π²ΠΎΡ Π½Π° Π΄Π΅Π»ΠΎΡ Π·Π° ΡΠΌΠ΅ΡΠΊΠ°
ΠΠΎΠ΄Π°ΡΡΠ΅ Π³ΠΎ ΠΊΠΎΠ΄ΠΎΡ ΠΏΠΎΠ΄ΠΎΠ»Ρ Π²ΠΎ 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 ΠΏΡΠ΅ΠΏΠΎΡΠ°ΡΡΠ²Π°:
- ΠΠ²Π΅Π³ΠΎΠ΄ΠΈΡΠ΅Π½ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅Π½ ΠΊΡΡΡ
βΠΠ°Ρ ΡΡΠΌ PRO Web Developerβ .- ΠΠ½Π»Π°ΡΠ½ ΠΊΡΡΡ
βC# ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ΅Ρβ .- ΠΡΠ°ΠΊΡΠΈΡΠ΅Π½ Π³ΠΎΠ΄ΠΈΡΠ΅Π½ ΠΊΡΡΡ
βΠΡΠΎΠ³ΡΠ°ΠΌΠ΅Ρ Π½Π° PHP ΠΎΠ΄ 0 Π΄ΠΎ PROβ .
ΠΠ·Π²ΠΎΡ: www.habr.com