рдХреЛрдЯрд▓рд┐рди рдореЗрдВ рдПрдХ рдЯрд┐рдк рдХреИрд▓рдХреБрд▓реЗрдЯрд░ рдмрдирд╛рдирд╛: рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ?

рдХреЛрдЯрд▓рд┐рди рдореЗрдВ рдПрдХ рдЯрд┐рдк рдХреИрд▓рдХреБрд▓реЗрдЯрд░ рдмрдирд╛рдирд╛: рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ?

рд╣рдо рдЖрдкрдХреЛ рджрд┐рдЦрд╛рддреЗ рд╣реИрдВ рдХрд┐ рдХреЛрдЯрд▓рд┐рди рдореЗрдВ рдПрдХ рд╕рд░рд▓ рдЯрд┐рдк рдЧрдгрдирд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреИрд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рдПред рдЕрдзрд┐рдХ рд╕рдЯреАрдХ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рдХреЛрдЯрд▓рд┐рди 1.3.21, рдПрдВрдбреНрд░реЙрдЗрдб 4, рдПрдВрдбреНрд░реЙрдЗрдб рд╕реНрдЯреВрдбрд┐рдпреЛ 3ред рд▓реЗрдЦ рджрд┐рд▓рдЪрд╕реНрдк рд╣реЛрдЧрд╛, рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ рдПрдВрдбреНрд░реЙрдЗрдб рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдЕрдкрдиреА рдпрд╛рддреНрд░рд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рдЖрдкрдХреЛ рдпрд╣ рд╕рдордЭрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдХрд┐ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдЕрдВрджрд░ рдХреНрдпрд╛ рдФрд░ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рдРрд╕рд╛ рдХреИрд▓рдХреБрд▓реЗрдЯрд░ рддрдм рдЙрдкрдпреЛрдЧреА рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдЖрдкрдХреЛ рдХрд┐рд╕реА рдХрдВрдкрдиреА рд╕реЗ рдпреБрдХреНрддрд┐рдпреЛрдВ рдХреА рдорд╛рддреНрд░рд╛ рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдЬреЛ рдХрд┐рд╕реА рд░реЗрд╕реНрддрд░рд╛рдВ рдпрд╛ рдХреИрдлреЗ рдореЗрдВ рд╕рдордп рдмрд┐рддрд╛рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓реЗрддреА рд╣реИред рдмреЗрд╢рдХ, рд╣рд░ рдХреЛрдИ рдФрд░ рд╣рдореЗрд╢рд╛ рд╡реЗрдЯрд░реЛрдВ рдХреЗ рд▓рд┐рдП рдЪрд╛рдп рдирд╣реАрдВ рдЫреЛрдбрд╝рддрд╛, рдпрд╣ рдПрдХ рдкрд╢реНрдЪрд┐рдореА рдкрд░рдВрдкрд░рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИред

рдЕрдиреБрд╕реНрдорд╛рд░рдХ: "рд╣реИрдмрд░" рдХреЗ рд╕рднреА рдкрд╛рдардХреЛрдВ рдХреЗ рд▓рд┐рдП - "рд╣реИрдмрд░" рдкреНрд░рдЪрд╛рд░ рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рд╕реА рднреА рд╕реНрдХрд┐рд▓рдмреЙрдХреНрд╕ рдкрд╛рдареНрдпрдХреНрд░рдо рдореЗрдВ рдирд╛рдорд╛рдВрдХрди рдХрд░рддреЗ рд╕рдордп 10 рд░реВрдмрд▓ рдХреА рдЫреВрдЯред

рд╕реНрдХрд┐рд▓рдмреЙрдХреНрд╕ рдЕрдиреБрд╢рдВрд╕рд╛ рдХрд░рддрд╛ рд╣реИ: рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдкрд╛рдареНрдпрдХреНрд░рдо "рдореЛрдмрд╛рдЗрд▓ рдбреЗрд╡рд▓рдкрд░ рдкреНрд░реЛ.

рдЬрдм рдпрд╣ рдРрдк рдЪрд▓ рд░рд╣рд╛ рд╣реЛ рддреЛ рдпрд╣ рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ:

рдХреЛрдЯрд▓рд┐рди рдореЗрдВ рдПрдХ рдЯрд┐рдк рдХреИрд▓рдХреБрд▓реЗрдЯрд░ рдмрдирд╛рдирд╛: рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ?

рдЖрдк рдХреБрд▓ рд░рд╛рд╢рд┐ рдХрд╛ рд╡рд╛рдВрдЫрд┐рдд рдкреНрд░рддрд┐рд╢рдд, рдмреИрдардХ рдореЗрдВ рднрд╛рдЧ рд▓реЗрдиреЗ рд╡рд╛рд▓реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рджрд░реНрдЬ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ - рдпреБрдХреНрддрд┐рдпреЛрдВ рдХреА рдорд╛рддреНрд░рд╛ рдЬреЛ рдЫреЛрдбрд╝реА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдПред

рд╢реБрд░реВ

рдРрдк рдХрд╛ рдкреВрд░рд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
рдХреЛрдЯрд▓рд┐рди рдореЗрдВ рдПрдХ рдЯрд┐рдк рдХреИрд▓рдХреБрд▓реЗрдЯрд░ рдмрдирд╛рдирд╛: рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ?

рдХреЛрдЯрд▓рд┐рди рдореЗрдВ рдПрдХ рдЯрд┐рдк рдХреИрд▓рдХреБрд▓реЗрдЯрд░ рдмрдирд╛рдирд╛: рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ?

рдкреНрд░рдердо рдХреНрд░рд┐рдпрд╛ - рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЖрдзрд╛рд░ рдбрд╛рдЙрдирд▓реЛрдб. рдЗрд╕реЗ рдПрдВрдбреНрд░реЙрдЗрдб рд╕реНрдЯреВрдбрд┐рдпреЛ 3.0 рдпрд╛ рдЙрд╕рдХреЗ рдмрд╛рдж рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдЦреЛрд▓реЗрдВред рд╣рдо рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ рдЪрд▓рд╛рддреЗ рд╣реИрдВ рдФрд░ рдПрдХ рд╕рдлреЗрдж рд╕реНрдХреНрд░реАрди рджреЗрдЦрддреЗ рд╣реИрдВред рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реИ, рдЬреИрд╕рд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдХреЛрдЯрд▓рд┐рди рдореЗрдВ рдПрдХ рдЯрд┐рдк рдХреИрд▓рдХреБрд▓реЗрдЯрд░ рдмрдирд╛рдирд╛: рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ?

рдХреЛрдЯрд▓рд┐рди рдореЗрдВ рдПрдХ рдЯрд┐рдк рдХреИрд▓рдХреБрд▓реЗрдЯрд░ рдмрдирд╛рдирд╛: рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ?

рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреНрд░рд┐рдпрд╛рдПрдБ рдХрд╛рд▓рд╛рдиреБрдХреНрд░рдорд┐рдХ рдХреНрд░рдо рдореЗрдВ рд▓рд┐рдЦреА рдЬрд╛рддреА рд╣реИрдВ, рддрд╛рдХрд┐ рд╕рдм рдХреБрдЫ рд╕реНрдкрд╖реНрдЯ рд╣реЛред рдЗрд╕реЗ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП, View -> Tool Windows -> TODO рдЦреЛрд▓реЗрдВред

рд╣рдо рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд░рдВрдЧ рдкреИрд▓реЗрдЯ рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП color.xml рдЦреЛрд▓рддреЗ рд╣реИрдВред strings.xml рдореЗрдВ рдЯреЗрдХреНрд╕реНрдЯ рдбреЗрдЯрд╛ (рдХреИрдкреНрд╢рди) рд╣реЛрддрд╛ рд╣реИ, рдФрд░ style.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"/>

рдЕрдм рдЖрдк рдорд╛рди рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЛ рд╕реНрдЯрд╛рдЗрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рд░рдВрдЧреЛрдВ рдХреЗ рд╕рд╛рде рдЦреЗрд▓ рд╕рдХрддреЗ рд╣реИрдВ рд╕рд╛рдордЧреНрд░реА.рдЖрдИрдУ рдЙрдкрдХрд░рдг.

рдЕрдм рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

рдХреЛрдЯрд▓рд┐рди рдореЗрдВ рдПрдХ рдЯрд┐рдк рдХреИрд▓рдХреБрд▓реЗрдЯрд░ рдмрдирд╛рдирд╛: рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ?
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд▓рд╛рдЧрдд рдХреА рдЧрдгрдирд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рджрд░реНрдЬ рдХрд┐рдП рдЧрдП рдбреЗрдЯрд╛ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИред

рдЦрд╛рддрд╛ рдЕрдиреБрднрд╛рдЧ рдХрд╛ рд╡рд┐рдХрд╛рд╕

рд╡реНрдпрдп рдЕрдиреБрднрд╛рдЧ (#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>

TODOs рд╕реВрдЪреА рдХреЗ рдмрд╛рдж LinearLayout рдХреЛ рдмрдВрдж рдХрд░реЗрдВ, рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ 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"/>

рдЪреВрдВрдХрд┐ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рдореБрдЦреНрдп рдХрд╛рд░реНрдп рд░реЗрд╕реНрддрд░рд╛рдВ рдореЗрдВ рд╕рднрд╛рдУрдВ рдореЗрдВ рднрд╛рдЧ рд▓реЗрдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рддрд┐рднрд╛рдЧреА рдХреЗ рд▓рд┐рдП рд╡реНрдпрдХреНрддрд┐рдЧрдд рд▓рд╛рдЧрдд рдХреА рдЧрдгрдирд╛ рдХрд░рдирд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдХреЙрд╕реНрдЯрдкрд░рдкрд░реНрд╕рдирдЯреЗрдХреНрд╕реНрдЯрд╡реНрдпреВ рдореБрдЦреНрдп рднреВрдорд┐рдХрд╛ рдирд┐рднрд╛рддрд╛ рд╣реИред

EditText рдЗрдирдкреБрдЯ рдХреЛ рдПрдХ рдкрдВрдХреНрддрд┐ рддрдХ рд╕реАрдорд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЗрд╕ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ NumberDecimal рдЗрдирдкреБрдЯ рдкреНрд░рдХрд╛рд░ рдкрд░ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдХреЛрдЯрд▓рд┐рди рдореЗрдВ рдПрдХ рдЯрд┐рдк рдХреИрд▓рдХреБрд▓реЗрдЯрд░ рдмрдирд╛рдирд╛: рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ?
рд╣рдо рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдХреБрд▓ рдХреНрд╖рддрд┐ (рдЯреВрдЯреЗ рд╣реБрдП рдХрдк, рдкреНрд▓реЗрдЯ рдЖрджрд┐) рдХреЗ рдкреИрд░рд╛рдореАрдЯрд░ рджрд░реНрдЬ рдХрд░рддреЗ рд╣реИрдВред

"рд▓реЛрдЧ рдФрд░ рдпреБрдХреНрддрд┐рдпрд╛рдБ" рдЕрдиреБрднрд╛рдЧ рдХрд╛ рд╡рд┐рдХрд╛рд╕

рдЯрд┐рдк рд░рд╛рд╢рд┐ рдЪрдпрдирдХрд░реНрддрд╛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП, рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдХреЛрдб рдХреЛ рдПрдХ рдирдП 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):

  • рдЗрдореЗрдЬрдмрдЯрди рдЖрдИрдбреА (рдкреАрдкрд▓рдмрдЯрди рдШрдЯрд╛рдПрдВ, рдкреАрдкреБрд▓рдмрдЯрди рдЬреЛрдбрд╝реЗрдВ)
  • рдЯреЗрдХреНрд╕реНрдЯрд╡реНрдпреВ рдЖрдИрдбреА (рдирдВрдмрд░рдСрдлрдкреАрдкрд▓рд╕реНрдЯреИрдЯрд┐рдХрдЯреЗрдХреНрд╕реНрдЯ, рдирдВрдмрд░рдСрдлрдкреАрдкрд▓рдЯреЗрдХреНрд╕реНрдЯрд╡реНрдпреВ)
  • 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):

рдХреНрд▓рд╛рд╕ рдореЗрдирдПрдХреНрдЯрд┐рд╡рд┐рдЯреА: 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() {
 
тАж
 
}

рд╣рдо рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЙрдиреНрдЪ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рджрд┐рдЦрддрд╛ рд╣реИ рдФрд░ рдХрд╛рдо рднреА рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣ рдмреЗрд╣рддрд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ.

рдпрджрд┐ рдЖрдк рдмрд┐рд▓ рд░рд╛рд╢рд┐ рдирд┐рдХрд╛рд▓рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдлрд┐рд░ рд╕рдВрдХреЗрдд рдпрд╛ рдорд┐рддреНрд░реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдмрдврд╝рд╛рддреЗ рд╣реИрдВ, рддреЛ рдРрдк рдХреНрд░реИрд╢ рд╣реЛ рдЬрд╛рдПрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рд╢реВрдиреНрдп рд▓рд╛рдЧрдд рдХреЗ рд▓рд┐рдП рдЕрднреА рддрдХ рдХреЛрдИ рдЪреЗрдХ рдирд╣реАрдВ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрджрд┐ рдЖрдк рдЪрд╛рд▓рд╛рди рд░рд╛рд╢рд┐ рдмрджрд▓рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╢реБрд▓реНрдХ рдЕрдкрдбреЗрдЯ рдирд╣реАрдВ рдХрд┐рдП рдЬрд╛рдПрдВрдЧреЗред

рдЕрдВрддрд┐рдо рдЪрд░рдг

рдЯреЗрдХреНрд╕реНрдЯрд╡реЙрдЪрд░ рдЬреЛрдбрд╝реЗрдВ (#16):

рдХреНрд▓рд╛рд╕ рдореЗрдирдПрдХреНрдЯрд┐рд╡рд┐рдЯреА: AppCompatActivity(), View.OnClickListener, TextWatcher {

рдлрд┐рд░ рд╣рдо рдмрд┐рд▓рдПрдбрд┐рдЯрдЯреЗрдХреНрд╕реНрдЯ рд╢реНрд░реЛрддрд╛ рдХреЛ рдПрдореНрдмреЗрдб рдХрд░рддреЗ рд╣реИрдВ (#17):

billEditText.addTextChangedListener(рдпрд╣)

рд╕рд╛рде рд╣реА рдЯреЗрдХреНрд╕реНрдЯрд╡реЙрдЪрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдЬреЛрдбрд╝реЗрдВ (#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) {}

рдХреЛрдЯрд▓рд┐рди рдореЗрдВ рдПрдХ рдЯрд┐рдк рдХреИрд▓рдХреБрд▓реЗрдЯрд░ рдмрдирд╛рдирд╛: рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ?

рдЦреИрд░, рдЕрдм рд╕рдм рдХреБрдЫ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ! рдмрдзрд╛рдИ рд╣реЛ, рдЖрдкрдиреЗ рдХреЛрдЯрд▓рд┐рди рдореЗрдВ рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛ "рдЯрд┐рдкрд┐рдВрдЧ рдХреИрд▓рдХреБрд▓реЗрдЯрд░" рд▓рд┐рдЦрд╛ рд╣реИред

рдХреЛрдЯрд▓рд┐рди рдореЗрдВ рдПрдХ рдЯрд┐рдк рдХреИрд▓рдХреБрд▓реЗрдЯрд░ рдмрдирд╛рдирд╛: рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ?

рд╕реНрдХрд┐рд▓рдмреЙрдХреНрд╕ рдЕрдиреБрд╢рдВрд╕рд╛ рдХрд░рддрд╛ рд╣реИ:

рд╕реНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╝реЗрдВ