Ag tógáil áireamhán leid i Kotlin: conas a oibríonn sé?

Ag tógáil áireamhán leid i Kotlin: conas a oibríonn sé?

Inseoimid duit conas iarratas simplí a chruthú chun leideanna a ríomh i Kotlin. Níos cruinne, Kotlin 1.3.21, Android 4, Android Studio 3. Beidh an t-alt suimiúil, ar an gcéad dul síos, dóibh siúd atá ag tosú ar a dturas i bhforbairt feidhmchlár Android. Ligeann sé duit a thuiscint cad agus conas a oibríonn sé taobh istigh den fheidhmchlár.

Beidh an t-áireamhán seo áisiúil nuair is gá duit méid na leideanna a ríomh ó chuideachta a chinneann am a chaitheamh i mbialann nó i gcaifé. Ar ndóigh, ní fhágann gach duine tip do na freastalaithe i gcónaí;

Meabhraímid: do léitheoirí uile "Habr" - lascaine de 10 rúbal nuair a chláraíonn siad in aon chúrsa Scilbox ag baint úsáide as an gcód bolscaireachta "Habr".

Molann Skillbox: Cúrsa praiticiúil “Forbróir soghluaiste PRO.

Seo an chuma atá ar an bhfeidhmchlár i bhfeidhm:

Ag tógáil áireamhán leid i Kotlin: conas a oibríonn sé?

Cuireann tú isteach an céatadán atá ag teastáil den mhéid iomlán, ar líon na rannpháirtithe cruinnithe, agus a fháil ar an toradh - an méid tip ba chóir duit a fhágáil.

Ag tosú

Breathnaíonn an comhéadan feidhmchláir iomlán mar seo:
Ag tógáil áireamhán leid i Kotlin: conas a oibríonn sé?

Ag tógáil áireamhán leid i Kotlin: conas a oibríonn sé?

An chéad ghníomh - Íoslódáil an bonn tionscadal. Oscail é in Android Studio 3.0 nó níos déanaí. Déanaimid an tionscadal a thógáil agus a sheoladh agus feicimid scáileán bán. Tá gach rud go breá, sin mar ba chóir dó a bheith.

Ag tógáil áireamhán leid i Kotlin: conas a oibríonn sé?

Ag tógáil áireamhán leid i Kotlin: conas a oibríonn sé?

Scríobhtar gníomhartha úsáideora sa tionscadal in ord croineolaíoch chun gach rud a dhéanamh soiléir. Chun é a fheiceáil, oscail Amharc -> Uirlis Windows -> TODO.

Déanaimid staidéar ar an tionscadal agus osclaíonn muid dathanna.xml chun an pailéad dathanna a mheas. Tá sonraí téacs (sínithe) ag strings.xml, agus tá roinnt teimpléid cló ann i styles.xml.

Forbairt na rannóige costais

Oscail gníomhaíocht_main.xml agus cuir an cód thíos leis an Leagan Amach Líneach (#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"/>

Anois is féidir leat an eolaire luachanna a stíl nó imirt le dathanna ag baint úsáide as ábhar.io uirlis.

Anois tá cuma mar seo ar an tionscadal:

Ag tógáil áireamhán leid i Kotlin: conas a oibríonn sé?
Mar a fheiceann tú, ríomhtar costais bunaithe ar na sonraí a chuir an t-úsáideoir isteach.

Rannóg na gcuntas a fhorbairt

Cuir an cód thíos leis an Leagan Amach Líneach i ndiaidh na Rannóige Costais (#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>

Dúnann muid an Leagan Amach Líneach tar éis liosta na TODOanna, agus ansin cuirimid cód nua leis, á chur taobh istigh den Leagan Amach Líneach (#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"/>

Ós rud é gurb é príomhthasc an iarratais costais aonair a ríomh do gach rannpháirtí i mbailiú bialainne, is é CostPerPersonTextView an príomhról.

Cuireann EditText teorainn leis an ionchur go líne amháin, ní mór an paraiméadar seo a shocrú go NumberDecimal inputType.

Ag tógáil áireamhán leid i Kotlin: conas a oibríonn sé?
Seolaimid an tionscadal don tástáil agus cuirimid isteach na paraiméadair le haghaidh damáiste ginearálta (cupáin briste, plátaí, etc.)

Forbairt na rannóige “Daoine agus Leideanna”.

Chun rogha toirte leideanna a chur leis, greamaigh an cód thíos isteach sa rannán nua Leagan Amach Líneach (#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>

Tá an chuid seo den chód riachtanach chun méid an leid a ríomh go cruinn. Is é 20 an luach réamhshocraithe téacs. Cuirtear deilbhíní ar fáil do ImageButtons i bhfillteán a bhfuil ceadanna scríofa aige.

Cóipeáil an chuid go hiomlán agus cuir an méid seo a leanas leis (#5):

  • IDs ImageButton (dealaighPeopleButton, addPeopleButton)
  • IDs TextView (líon DaoineStaticText, numberOfPeopleTextView)
  • DefaultText le haghaidh numberOfPeopleTextView (ní mór 4 a bheith ann).

Ag tógáil áireamhán leid i Kotlin: conas a oibríonn sé?

Anois, nuair a sheolann tú an feidhmchlár, tá deis ann méid an tsonraisc a chur leis, oibríonn na cnaipí “Add/Dealaigh” freisin, ach ní tharlaíonn aon rud go fóill.

Amhairc a Chur Leis

Oscail MainActivity.kt agus cuir é seo leis an bhfeidhm 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
 
}

Críochnú na cnaipí

Chun tacaíocht do chliceáil cnaipe a chur leis, cuirimid View.OnClickListener i bhfeidhm ag leibhéal an ranga (#7):

Príomhghníomhaíocht ranga: AppCompatActivity(), View.OnClickListener {

Ní bheidh tú in ann an tionscadal a chur le chéile faoi láthair;

override fun onClick(v: View?) {
        when (v?.id) {
            R.id.addTipButton -> incrementTip()
            R.id.subtractTipButton -> decrementTip()
            R.id.addPeopleButton -> incrementPeople()
            R.id.subtractPeopleButton -> decrementPeople()
        }
    }

Maidir le cnaipí agus lasca, eagraíonn Kotlin gach rud an-fionnuar! Cuir an cód thíos le gach feidhm incriminte agus laghdaithe
(#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()
        }
    }

Anseo cosnaíonn an cód na feidhmeanna incriminte le huasluachanna (MAX_TIP & MAX_PEOPLE). Ina theannta sin, cosnaíonn an cód na feidhmeanna decrement le luachanna íosta (MIN_TIP & MIN_PEOPLE).

Anois nascaimid na cnaipí le héisteoirí san fheidhm initViews (#13):

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

Ag tógáil áireamhán leid i Kotlin: conas a oibríonn sé?

Is féidir leat damáistí iomlána, leideanna, agus líon rannpháirtithe an chruinnithe a chur leis anois. Bhuel, anois an rud is tábhachtaí ...

Rannóg ríomh costas

Ríomhann an cód seo costais (#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)
 
}

Bhuel, tugtar feidhm anseo a fhágann gur féidir líon na ndaoine sa chuideachta a chur san áireamh agus leideanna a ríomh (#15):

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

Seolfaimid an t-iarratas. Breathnaíonn sé agus oibríonn sé go hiontach. Ach d'fhéadfadh sé a bheith níos fearr.

Má dhéanann tú iarracht méid an bhille a bhaint agus ansin líon na leideanna nó na gcairde a mhéadú, beidh an t-iarratas tuairteála toisc nach bhfuil aon seiceáil fós ar an luach costais nialasach. Thairis sin, má dhéanann tú iarracht méid an bhille a athrú, ní dhéanfar na táillí a nuashonrú.

Céimeanna deiridh

Cuir TextWatcher leis (#16):

Príomhghníomhaíocht ranga: AppCompatActivity(), View.OnClickListener, TextWatcher {

Ansin leabaíomar an t-éisteoir billEditText (#17):

billEditText.addTextChangedListener(seo)

Chomh maith leis sin cuirimid cód leis chun TextWatcher a rith (#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) {}

Ag tógáil áireamhán leid i Kotlin: conas a oibríonn sé?

Bhuel, anois oibríonn go hiomlán! Comhghairdeas, tá do “Leid Áireamhán” féin scríofa agat i Kotlin.

Ag tógáil áireamhán leid i Kotlin: conas a oibríonn sé?

Molann Skillbox:

Foinse: will.com

Add a comment