Fausia se fua fa'atatau ile Kotlin: fa'afefea ona aoga?

Fausia se fua fa'atatau ile Kotlin: fa'afefea ona aoga?

Matou te taʻu atu ia te oe le auala e fai ai se talosaga faigofie mo le fuafuaina o fautuaga ile Kotlin. E sili atu le saʻo, Kotlin 1.3.21, Android 4, Android Studio 3. O le tusiga o le a manaia, muamua lava, mo i latou o loʻo amataina la latou faigamalaga i le atinaʻeina o talosaga Android. E mafai ai ona e malamalama i le mea ma le auala e galue ai i totonu o le talosaga.

O lenei calculator o le a faʻaaogaina pe a e manaʻomia le fuafuaina o le aofaʻi o fautuaga mai se kamupani e filifili e faʻaalu se taimi i se faleaiga poʻo se cafe. O le mea moni, e le o tagata uma e tuʻuina atu se faʻamatalaga i tagata faʻatali; e sili atu lenei i tu ma aga i Sisifo, ae o le faagasologa o le atinaʻeina o sea talosaga e manaia i soʻo se tulaga.

Matou te faʻamanatu atu ia te oe: mo tagata faitau uma o le "Habr" - o se faʻaitiitiga o 10 rubles pe a lesitala i soʻo se vasega Skillbox e faʻaaoga ai le code promotional "Habr".

Ua fautuaina e Skillbox: Kosi fa'ata'ita'i "O le fa'atupuina telefoni feavea'i PRO.

O le mea lea e foliga mai o loʻo faʻaogaina le talosaga:

Fausia se fua fa'atatau ile Kotlin: fa'afefea ona aoga?

E te ulufale i le pasene manaʻomia o le aofaʻi atoa, le aofaʻi o tagata auai i fonotaga, ma maua le iʻuga - o le aofaʻi o faʻamatalaga e tatau ona e alu.

Amata

O le fa'aoga atoatoa o le fa'aoga e pei o lenei:
Fausia se fua fa'atatau ile Kotlin: fa'afefea ona aoga?

Fausia se fua fa'atatau ile Kotlin: fa'afefea ona aoga?

Gaioiga muamua- la'uina o le faavae o galuega. Tatala i le Android Studio 3.0 pe mulimuli ane. Matou te fausia ma faʻalauiloa le poloketi ma vaʻai i se lanu paʻepaʻe. O loʻo lelei mea uma, e tatau ona i ai.

Fausia se fua fa'atatau ile Kotlin: fa'afefea ona aoga?

Fausia se fua fa'atatau ile Kotlin: fa'afefea ona aoga?

O gaioiga a tagata fa'aoga o lo'o tusia i totonu o le poloketi i le fa'asologa o taimi e fa'amanino ai mea uma. Ina ia matamata i ai, tatala View -> Tool Windows -> TODO.

Matou te suʻesuʻeina le poloketi ma tatala le lanu.xml e iloilo ai le lanu lanu. strings.xml o lo'o i ai fa'amaumauga o tusitusiga (saini), ma styles.xml o lo'o iai le tele o fa'ata'ita'iga vaitusi.

Atinae vaega tau

Tatala le activity_main.xml ma faʻaopopo le code i lalo ile 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"/>

Ole taimi nei e mafai ona e faʻavasegaina le faʻatonuga o mea taua pe taʻalo i lanu faʻaoga mea.io meafaigaluega.

O lea la o le poloketi e pei o lenei:

Fausia se fua fa'atatau ile Kotlin: fa'afefea ona aoga?
E pei ona mafai ona e vaʻaia, o tau e faʻatatau i luga o faʻamaumauga na tuʻuina atu e le tagata faʻaoga.

Atinae o le vaega o teugatupe

Fa'aopoopo le fa'ailoga o lo'o i lalo ile LinearLayout pe a uma le Vaega o Tupe Fa'aalu (#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>

Matou te tapunia le LinearLayout pe a maeʻa le lisi o TODO, ona faʻaopoopo lea o le code fou, tuʻu i totonu o le 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"/>

Talu ai o le galuega autu o le talosaga o le fuafuaina o tau taʻitasi mo tagata taʻitoʻatasi i se faʻapotopotoga faleaiga, o le costPerPersonTextView o loʻo faʻatinoina le matafaioi autu.

EditText faʻatapulaʻaina le faʻaoga i le laina e tasi, e tatau ona seti lenei parakalafa ile NumberDecimal inputType.

Fausia se fua fa'atatau ile Kotlin: fa'afefea ona aoga?
Matou te faʻalauiloaina le poloketi mo le suʻega ma faʻapipiʻi faʻamaufaʻailoga mo faʻaleagaina lautele (ipu gau, ipu, ma isi)

Atina'e o le vaega "Tagata ma Fautuaga".

Ina ia faʻaopoopo se filifiliga voluma pito, faʻapipiʻi le numera o loʻo i lalo i le laina LinearLayout fou (#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>

O lenei vaega o le code e mana'omia e fa'atatau sa'o le aofa'i o le pito. Ole tau ole tusitusiga ole 20. ImageButtons o loʻo tuʻuina atu i aikona i totonu o se pusa ma faʻatagaga tusitusi.

Kopi atoa le vaega ma fa'aopoopo mea nei (#5):

  • ImageButton id (toesePeopleButton, addPeopleButton)
  • TextView id(numberOfPeopleStaticText, numberOfPeopleTextView)
  • DefaultText mo numeraOfPeopleTextView (e tatau ona 4).

Fausia se fua fa'atatau ile Kotlin: fa'afefea ona aoga?

I le taimi nei, pe a e faʻalauiloa le talosaga, o loʻo i ai se avanoa e faʻaopoopo ai le aofaʻi o pili, o loʻo galue foi faʻamau "Add / Subtract", ae leai se mea e tupu.

Faaopoopo Vaaiga

Tatala MainActivity.kt ma faʻaopopo i le galuega 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
 
}

Fa'auma fa'amau

Ina ia fa'aopoopo le lagolago mo kiliki fa'amau, matou te fa'atinoina le View.OnClickListener i le vasega tulaga (#7):

vasega MainActivity: AppCompatActivity(), View.OnClickListener {

O le a le mafai ona tuʻufaʻatasia le poloketi i le taimi nei; e tatau ona e faia ni nai laasaga (#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()
        }
    }

I le tulaga o ki ma ki, Kotlin faʻatulagaina mea uma e sili ona manaia! Fa'aopoopo le fa'ailoga i lalo i galuega fa'aopoopo uma ma fa'aitiitia
(#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()
        }
    }

O iinei e puipuia ai e le code le faʻaopoopoga o galuega ma tau maualuga (MAX_TIP & MAX_PEOPLE). E le gata i lea, o le tulafono e puipuia ai galuega faʻaititia ma tau maualalo (MIN_TIP & MIN_PEOPLE).

O lea ua matou faʻafesoʻotaʻi faʻamau ma tagata faʻalogologo i le galuega initViews (#13):

private fun initViews() {
 
...
 
addTipButton.setOnClickListener(this)
        subtractTipButton.setOnClickListener(this)
 
addPeopleButton.setOnClickListener(this)
        subtractPeopleButton.setOnClickListener(this)
 
//TODO #15: Bind EditText to TextWatcher
}

Fausia se fua fa'atatau ile Kotlin: fa'afefea ona aoga?

E mafai nei ona e fa'aopoopo le aofa'i o mea leaga, fa'amatalaga, ma le aofa'i o tagata e auai i fonotaga. Ia, o le taimi nei o le mea sili ona taua ...

Vaega fa'atatau o tau

O lenei code e fa'atatauina tau (#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)
 
}

Ia, o se galuega e taʻua e mafai ai ona amanaia le numera o tagata i totonu o le kamupani ma fuafua fautuaga (#15):

private fun incrementTip() {
 
…
 
}
 
private fun decrementTip() {
 
…
 
}
 
private fun incrementPeople() {
 
…
 
}
 
private fun decrementPeople() {
 
…
 
}

Sei o tatou tatala le talosaga. E foliga ma aoga tele. Ae e mafai ona sili atu.

Afai e te taumafai e aveese le aofaʻi o pili ona faʻaopoopoina lea o le numera o fautuaga poʻo uo, o le a paʻu le talosaga ona e leai se siaki mo le tau e leai se tau. E le gata i lea, afai e te taumafai e sui le aofaʻi o pili, o le a le toe faʻafouina tau.

Laasaga mulimuli

Fa'aopoopo le TextWatcher (#16):

Vasega MainActivity: AppCompatActivity(), View.OnClickListener, TextWatcher {

Ona matou faʻapipiʻi lea o le billEditText listener (#17):

billEditText.addTextChangedListener(lenei)

Faʻaopoopo matou te faʻaopoopo le code e faʻatino ai 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) {}

Fausia se fua fa'atatau ile Kotlin: fa'afefea ona aoga?

Ia, i le taimi nei e matua aoga mea uma! Fa'afetai, ua e tusia lau lava "Tip Calculator" i Kotlin.

Fausia se fua fa'atatau ile Kotlin: fa'afefea ona aoga?

Ua fautuaina e Skillbox:

puna: www.habr.com

Faaopoopo i ai se faamatalaga