Computatrum extremum in Kotlin aedificans: quomodo operatur?

Computatrum extremum in Kotlin aedificans: quomodo operatur?

Ostendimus tibi quomodo ad applicationem calculi simplicis extremitatis in Kotlin creare possit. Ut accuratius sim, Kotlin 1.3.21, Android 4, Android Studio 3. Articulus amet ante omnia erit iis qui in applicationibus Android enucleandis iter suum committunt. Permittit te intelligere quid et quomodo opera intus in applicatione.

Talis calculator utilis est cum quantitatem apicibus e coetu computare debes, qui tempus in caupona vel casu versari statuit. Utique, non omnes, non semper tea ministris relinquit, hoc magis occidentalis traditionis, sed talis applicationis processus in aliquo casu evolvere interesting.

admonemus; omnibus legentibus "Habr" - discount 10 rublorum cum scribendo in quavis Skillbox utens "Habr" codice promotivo.

Skillbox commendat: Cursus practicus "Mobile elit PRO.

Hic est quod app similis cum currit:

Computatrum extremum in Kotlin aedificans: quomodo operatur?

Ingredimini summae quantitatem desideratam recipis, numerum participantium in conventu et proventum - summa apicibus quae relinquenda sunt.

questus Coepi

Plenum interface de app similis est:
Computatrum extremum in Kotlin aedificans: quomodo operatur?

Computatrum extremum in Kotlin aedificans: quomodo operatur?

Actio prima - proiciamus basis download. Aperi in Android Studio 3.0 vel postea. Aedificamus et curritur consilium et videmus album velum. Omne pulchrum, quod esse debet.

Computatrum extremum in Kotlin aedificans: quomodo operatur?

Computatrum extremum in Kotlin aedificans: quomodo operatur?

Usoris actiones in ordine chronologico incepto scriptae sunt, ut omnia plana sint. Ut videas, aperi View -> Fenestra tool -> TODO.

Studimus incepto et apertis coloribus.xml ad colorem palette aestimandum. strings.xml textus notitias (captiones) continet ac stilos.xml plura exempla fontium continet.

Pretium Sectionis Development

Aperta activity_main.xml et codicem infra ad LinearLayout (#1) adde:

<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"/>

Nunc potes indicare valores directorios vel ludere cum coloribus utendo material.io tool.

Nunc elit similis est:

Computatrum extremum in Kotlin aedificans: quomodo operatur?
Ut videre potes, sumptus calculus in notitia utentis intratur.

Progressio rationis sectionem

Adde codicem infra ad LinearLayout post Sectionem Expense (# 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>

Claude LinearLayout post TODOs indicem, et postea novum codicem adde, eum intra LinearLayout ponens (#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"/>

Cum praecipuum munus applicationis est singulas sumptus pro singulis participantium in conventibus in caupona computare, costPersonTextView principale munus agit.

Limites editText ad unam lineam initus, hic modulus ad inputType NumberDecimal ponendus est.

Computatrum extremum in Kotlin aedificans: quomodo operatur?
Incipimus consilium pro experimento ac parametros totius damni (scyphi fracti, catilli, etc.) intrant.

Progressio "Populi et Apicibus" sectionem

Ad summam partem electrix addere, codicem crustulum infra in sectione nova 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>

Hoc fragmentum codicis accurate computare ad summam quantitatem requiritur. Defalta textus valoris est 20. ImageButtons iconibus praebentur in folder cum permissionibus scribentibus.

Totam sectionem effingo et sequenti adde (# 5);

  • ImageButton ids (subtractPeopleButton, addPeopleButton)
  • TextView ids (numberOfPeopleStaticText, numberOfPeopleTextView)
  • DefaultText pro numberOfPeopleTextView (debet esse 4).

Computatrum extremum in Kotlin aedificans: quomodo operatur?

Nunc cum applicatione incipias, cautionem quantitatem addere potest, Add / Subtract tesserae etiam operantur, sed tantum nihil accidit.

Add Views

Aperi MainActivity.kt et hoc ad munus initViews adde (#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
 
}

Consummatione bullarum

Ad auxilium pro pressione conjunctionis addere, ad effectum deducendi View.OnClickListener in gradu classium (#7);

genus MainActivity: AppCompatActivity (), View.OnClickListener {

Componendis inceptis nunc opus non erit, opus est ut pauca plura vestigia perficias (#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()
        }
    }

Secundum bullarum et virgarum, Kotlin omnia frigidissima constituerunt! Adde codicem infra ad munera omnia incrementi et decrementi
(#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()
        }
    }

Hic signum incrementa muneribus maximis valoribus tuetur (MAX_TIP & MAX_PEOPLE). Praeterea signum munera decrementi munit cum valoribus minimis (MIN_TIP & MIN_PEOPLE).

Nunc tesserae auditorum in officio initViews obligamus (#13);

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

Computatrum extremum in Kotlin aedificans: quomodo operatur?

Totum damnum, apices et numerum participantium conventuum addere potes. Bene, nunc primum.

Pretium sectionis

Hoc signum determinat sumptus (# 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)
 
}

Bene, hic munus dicitur quod sinit considerare numerum hominum in societate et calculare extremum (#15);

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

Lorem applicationem. Spectat et magna facit. sed melius potuit.

Si libellum quantitatem tollere conaris et tum numerum innuere vel amicorum augere, app collidet quia nulla ceptum nulla adhuc gratuita est. Praeterea si cautionem mutare conaris, crimen non renovabitur.

Gradus finales

Adde TextWatcher (16):

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

Deinde embed in billEditText auditorem (# XVII);

billEditText.addTextChangedListener (hoc)

Plus addendi codicem facere TextWatcher (# XVIII):

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) {}

Computatrum extremum in Kotlin aedificans: quomodo operatur?

Age, nunc omnia opera! Gratulor, scripsisti tuum "Tipping Calculatorem" in Kotlin.

Computatrum extremum in Kotlin aedificans: quomodo operatur?

Skillbox commendat:

Source: www.habr.com