Creu cyfrifiannell awgrymiadau yn Kotlin: sut mae'n gweithio?

Creu cyfrifiannell awgrymiadau yn Kotlin: sut mae'n gweithio?

Rydyn ni'n dweud wrthych chi sut i greu cymhwysiad syml ar gyfer cyfrifo awgrymiadau yn Kotlin. Yn fwy manwl gywir, Kotlin 1.3.21, Android 4, Android Stiwdio 3. Bydd yr erthygl yn ddiddorol, yn gyntaf oll, ar gyfer y rhai sy'n dechrau ar eu taith yn datblygu cais Android. Mae'n caniatáu ichi ddeall beth a sut mae'n gweithio y tu mewn i'r cais.

Bydd y gyfrifiannell hon yn ddefnyddiol pan fydd angen i chi gyfrifo faint o awgrymiadau gan gwmni sy'n penderfynu treulio amser mewn bwyty neu gaffi. Wrth gwrs, nid yw pawb bob amser yn gadael tip i'r gweinyddwyr; mae hwn yn fwy o draddodiad Gorllewinol, ond mae'r broses o ddatblygu cais o'r fath yn ddiddorol beth bynnag.

Rydym yn atgoffa: i holl ddarllenwyr "Habr" - gostyngiad o 10 rubles wrth gofrestru ar unrhyw gwrs Skillbox gan ddefnyddio'r cod hyrwyddo "Habr".

Mae Skillsbox yn argymell: Cwrs ymarferol “Datblygwr symudol PRO.

Dyma sut olwg sydd ar y cais ar waith:

Creu cyfrifiannell awgrymiadau yn Kotlin: sut mae'n gweithio?

Rydych chi'n nodi'r ganran a ddymunir o'r cyfanswm, nifer y cyfranogwyr cyfarfod, ac yn cael y canlyniad - faint o awgrym y dylech ei adael.

Dechrau arni

Mae'r rhyngwyneb cais cyflawn yn edrych fel hyn:
Creu cyfrifiannell awgrymiadau yn Kotlin: sut mae'n gweithio?

Creu cyfrifiannell awgrymiadau yn Kotlin: sut mae'n gweithio?

Gweithred gyntaf - lawrlwytho sylfaen y prosiect. Agorwch ef yn Android Studio 3.0 neu'n hwyrach. Rydyn ni'n adeiladu ac yn lansio'r prosiect ac yn gweld sgrin wen. Mae popeth yn iawn, felly y dylai fod.

Creu cyfrifiannell awgrymiadau yn Kotlin: sut mae'n gweithio?

Creu cyfrifiannell awgrymiadau yn Kotlin: sut mae'n gweithio?

Mae gweithredoedd defnyddwyr yn cael eu hysgrifennu yn y prosiect mewn trefn gronolegol i wneud popeth yn glir. I'w weld, agorwch View -> Tool Windows -> TODO.

Rydym yn astudio'r prosiect ac yn agor lliwiau.xml i werthuso'r palet lliw. Mae strings.xml yn cynnwys data testun (llofnodion), ac mae styles.xml yn cynnwys sawl templed ffont.

Datblygu adran cost

Agorwch activity_main.xml ac ychwanegwch y cod isod i'r Cynllun Llinol (#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"/>

Nawr gallwch chi arddull y cyfeiriadur gwerthoedd neu chwarae gyda lliwiau gan ddefnyddio offeryn deunydd.io.

Nawr mae'r prosiect yn edrych fel hyn:

Creu cyfrifiannell awgrymiadau yn Kotlin: sut mae'n gweithio?
Fel y gallwch weld, cyfrifir costau yn seiliedig ar y data a gofnodwyd gan y defnyddiwr.

Datblygu'r adran gyfrifon

Ychwanegwch y cod isod at y Cynllun Llinol ar ôl yr Adran Treuliau (#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>

Rydyn ni'n cau'r Gosodiad Llinellol ar ôl y rhestr o TODOs, ac yna'n ychwanegu cod newydd, gan ei osod y tu mewn i'r Gosodiad Llinellol (#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"/>

Gan mai prif dasg y cais yw cyfrifo costau unigol pob cyfranogwr mewn cynulliad bwyty, costPerPersonTextView sy'n chwarae'r brif rôl.

Mae EditText yn cyfyngu'r mewnbwn i un llinell, rhaid gosod y paramedr hwn i NumberDecimal inputType.

Creu cyfrifiannell awgrymiadau yn Kotlin: sut mae'n gweithio?
Rydym yn lansio'r prosiect ar gyfer y prawf ac yn nodi'r paramedrau ar gyfer difrod cyffredinol (cwpanau wedi'u torri, platiau, ac ati)

Datblygu'r adran “Pobl a Chynghorion”.

I ychwanegu dewis cyfaint awgrym, gludwch y cod isod i'r adran Gosodiad Llinellol newydd (#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>

Mae'r adran hon o'r cod yn angenrheidiol i gyfrifo swm y blaen yn gywir. Y gwerth testun rhagosodedig yw 20. Darperir eiconau i ImageButtons mewn ffolder gyda chaniatâd ysgrifennu.

Copïwch yr adran yn gyfan gwbl ac ychwanegwch y canlynol (#5):

  • ID ImageButton (tynnuPeopleButton, ychwaneguPeopleButton)
  • IDau TextView (rhifOfPeopleStaticText, numberOfPeopleTextView)
  • DefaultText ar gyfer numberOfPeopleTextView (rhaid bod yn 4).

Creu cyfrifiannell awgrymiadau yn Kotlin: sut mae'n gweithio?

Nawr, pan fyddwch chi'n lansio'r cais, mae cyfle i ychwanegu swm yr anfoneb, mae'r botymau “Ychwanegu/Tynnu” hefyd yn gweithio, ond does dim byd yn digwydd eto.

Ychwanegu Golygfeydd

Agorwch MainActivity.kt ac ychwanegwch hwn at swyddogaeth 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
 
}

Gorffen y botymau

I ychwanegu cefnogaeth ar gyfer cliciau botwm, rydym yn gweithredu View.OnClickListener ar lefel dosbarth (#7):

Dosbarth Prif Weithgaredd: AppCompatActivity(), View.OnClickListener {

Ni fydd yn bosibl llunio'r prosiect ar hyn o bryd; mae angen i chi wneud ychydig mwy o gamau (#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()
        }
    }

O ran botymau a switshis, mae Kotlin yn trefnu popeth yn cŵl iawn! Ychwanegwch y cod isod at yr holl swyddogaethau cynyddran a gostyngiad
(#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()
        }
    }

Yma mae'r cod yn amddiffyn y swyddogaethau cynyddiad gyda gwerthoedd uchaf (MAX_TIP & MAX_PEOPLE). Yn ogystal, mae'r cod yn amddiffyn y swyddogaethau gostwng gyda gwerthoedd lleiaf (MIN_TIP & MIN_PEOPLE).

Nawr rydym yn cysylltu'r botymau â gwrandawyr yn swyddogaeth initViews (#13):

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

Creu cyfrifiannell awgrymiadau yn Kotlin: sut mae'n gweithio?

Gallwch nawr ychwanegu cyfanswm yr iawndal, awgrymiadau, a nifer y cyfranogwyr yn y cyfarfod. Wel, nawr y peth pwysicaf ...

Adran cyfrifo cost

Mae'r cod hwn yn cyfrifo costau (#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)
 
}

Wel, dyma swyddogaeth a elwir sy'n ei gwneud yn bosibl i gymryd i ystyriaeth nifer y bobl yn y cwmni a chyfrifo awgrymiadau (#15):

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

Gadewch i ni lansio'r cais. Mae'n edrych ac yn gweithio'n wych. Ond gallai fod yn well.

Os ceisiwch gael gwared ar swm y bil ac yna cynyddu nifer yr awgrymiadau neu ffrindiau, bydd y cais yn chwalu oherwydd nid oes siec eto am y gwerth cost sero. Ar ben hynny, os ceisiwch newid swm y bil, ni fydd y taliadau'n cael eu diweddaru.

Camau terfynol

Ychwanegu TextWatcher (#16):

Dosbarth Prif Weithgaredd: AppCompatActivity(), View.OnClickListener, TextWatcher {

Yna rydym yn mewnosod y gwrandäwr bilEditText (#17):

billEditText.addTextChangedListener(hwn)

Hefyd rydym yn ychwanegu cod i weithredu 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) {}

Creu cyfrifiannell awgrymiadau yn Kotlin: sut mae'n gweithio?

Wel, nawr mae popeth yn gweithio! Llongyfarchiadau, rydych chi wedi ysgrifennu eich “Tip Calculator” eich hun yn Kotlin.

Creu cyfrifiannell awgrymiadau yn Kotlin: sut mae'n gweithio?

Mae Skillsbox yn argymell:

Ffynhonnell: hab.com

Ychwanegu sylw