Ukudala i-tip calculator e-Kotlin: isebenza njani?

Ukudala i-tip calculator e-Kotlin: isebenza njani?

Siyakuxelela indlela yokwenza isicelo esilula sokubala iingcebiso eKotlin. Ngokuchanekileyo, i-Kotlin 1.3.21, i-Android 4, i-Android Studio 3. Inqaku liya kuba nomdla, okokuqala, kulabo baqala uhambo lwabo kuphuhliso lwesicelo se-Android. Ikuvumela ukuba uqonde ukuba yintoni kwaye isebenza njani ngaphakathi kwesicelo.

Le calculator iya kunceda xa ufuna ukubala inani leengcebiso ezivela kwinkampani ethatha isigqibo sokuchitha ixesha kwindawo yokutyela okanye kwi-cafe. Ewe, ayinguye wonke umntu osoloko eshiya ingcebiso kubalungiseleli; oku kungaphezulu kwesithethe saseNtshona, kodwa inkqubo yokuphuhlisa isicelo esinjalo inomdla kuyo nayiphi na imeko.

Siyakhumbuza: kubo bonke abafundi be "Habr" - isaphulelo se-ruble ye-10 xa ubhalisa kuyo nayiphi na ikhosi ye-Skillbox usebenzisa ikhowudi yokuphromotha "Habr".

I-Skillbox iyacebisa: Ikhosi esebenzayo "Umphuhlisi weselula PRO.

Nantsi indlela isicelo esijongeka ngayo xa sisebenza:

Ukudala i-tip calculator e-Kotlin: isebenza njani?

Ufaka ipesenti efunekayo yemali iyonke, inani labathathi-nxaxheba bentlanganiso, kwaye ufumane isiphumo - isixa sengcebiso ekufuneka uyishiye.

Qala

Ujongano olupheleleyo lwesicelo lujongeka ngolu hlobo:
Ukudala i-tip calculator e-Kotlin: isebenza njani?

Ukudala i-tip calculator e-Kotlin: isebenza njani?

Inyathelo lokuqala - ukukhuphela isiseko seprojekthi. Yivule kwi-Android Studio 3.0 okanye kamva. Sakha kwaye siqalise iprojekthi kwaye sibone isikrini esimhlophe. Yonke into ilungile, kufanele kube njalo.

Ukudala i-tip calculator e-Kotlin: isebenza njani?

Ukudala i-tip calculator e-Kotlin: isebenza njani?

Izenzo zabasebenzisi zibhalwa kwiprojekthi ngokulandelelana kweziganeko ukwenza yonke into icace. Ukuyijonga, vula Jonga -> Isixhobo seWindows -> TODO.

Sifunda iprojekthi kwaye sivule imibala.xml ukuvavanya umbala wombala. strings.xml iqulathe idatha yokubhaliweyo (iisignitsha), kunye nezimbo.xml iqulathe itemplates ezininzi zamagama.

Uphuhliso lwecandelo leendleko

Vula i-activity_main.xml kwaye wongeze ikhowudi engezantsi kwi-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"/>

Ngoku ungabhala uluhlu lwamaxabiso okanye udlale ngemibala usebenzisa isixhobo.io isixhobo.

Ngoku iprojekthi ibonakala ngolu hlobo:

Ukudala i-tip calculator e-Kotlin: isebenza njani?
Njengoko ubona, iindleko zibalwa ngokusekelwe kwidatha efakwe ngumsebenzisi.

Uphuhliso lwecandelo le-akhawunti

Yongeza ikhowudi engezantsi kuLuhlulo lweMigca emva kweCandelo leNtetho (#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>

Sivala i-LinearLayout emva koluhlu lwe-TODO, kwaye emva koko songeze ikhowudi entsha, siyibeka ngaphakathi kwe-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"/>

Kuba umsebenzi ophambili wesicelo kukubala iindleko zomntu ngamnye kwindibano yokutyela, i-costPerPersonTextView idlala indima ephambili.

Hlela iSibhalo sinciphisa igalelo kumgca omnye, le parameter kufuneka imiselwe kuNaniDecimal inputType.

Ukudala i-tip calculator e-Kotlin: isebenza njani?
Siqalisa iprojekthi yovavanyo kwaye sifaka iiparameters zomonakalo jikelele (iikomityi eziphukileyo, iiplate, njl.)

Uphuhliso lwecandelo elithi "Abantu kunye neeNgcebiso".

Ukongeza ingcebiso yevolyum yokukhetha, coma ikhowudi engezantsi kwicandelo elitsha leLinearLayout (#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>

Eli candelo lekhowudi liyimfuneko ukubala ngokuchanekileyo isixa sengcebiso. Ixabiso lokubhaliweyo okungagqibekanga ngama-20. Amaqhosha omfanekiso anikwe ii-ayikhoni kwisiqulathi seemvume zokubhala.

Khuphela icandelo ngokupheleleyo kwaye wongeze oku kulandelayo (#5):

  • I-ID yeQhosha loMfanekiso (khupha iQhosha laBantu, yongeza iQhosha laBantu)
  • I-ID ye-TextView (inomboloOfPeopleStaticText, numberOfPeopleTextView)
  • uMbhalo oMiselweyo wenomboloOfPeopleTextView (kufuneka ibe sisi-4).

Ukudala i-tip calculator e-Kotlin: isebenza njani?

Ngoku, xa uqalisa isicelo, kukho ithuba lokongeza isixa se-invoyisi, amaqhosha "Yongeza / Thabatha" nawo ayasebenza, kodwa akukho nto eyenzekayo.

Ukongeza iiJongo

Vula MainActivity.kt kwaye wongeze oku kumsebenzi we 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
 
}

Ukugqiba amaqhosha

Ukongeza inkxaso yokucofa amaqhosha, siphumeza i-View.OnClickListener kwinqanaba leklasi (#7):

iklasi uMsebenzi oPhambili: AppCompatActivity(), Jonga.OnClickListener {

Akunakwenzeka ukuqulunqa iprojekthi ngoku; kufuneka wenze amanye amanyathelo ambalwa (#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()
        }
    }

Ngokumalunga namaqhosha kunye nokutshintsha, uKotlin uququzelela yonke into epholileyo kakhulu! Yongeza ikhowudi engezantsi kuwo wonke umsebenzi wokunyusa kunye nokunciphisa
(#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()
        }
    }

Apha ikhowudi ikhusela imisebenzi yokunyusa kunye namaxabiso aphezulu (MAX_TIP & MAX_PEOPLE). Ukongeza, ikhowudi ikhusela imisebenzi yokuncipha kunye namaxabiso amancinci (MIN_TIP & MIN_PEOPLE).

Ngoku sinxulumanisa amaqhosha kunye nabaphulaphuli kumsebenzi we-initViews (#13):

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

Ukudala i-tip calculator e-Kotlin: isebenza njani?

Ngoku unokongeza umonakalo opheleleyo, iingcebiso, kunye nenani labathathi-nxaxheba bentlanganiso. Ewe, ngoku eyona nto ibalulekileyo ...

Icandelo lokubala iindleko

Le khowudi ibala iindleko (#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)
 
}

Ewe, apha umsebenzi ubizwa ngokuba wenze ukuba kuthathelwe ingqalelo inani labantu kwinkampani kwaye ubale iingcebiso (#15):

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

Masiqalise usetyenziso. Ijongeka kwaye isebenza kakuhle. Kodwa kunokuba ngcono.

Ukuba uzama ukususa isixa sebhili kwaye unyuse inani leengcebiso okanye abahlobo, isicelo siya konakala kuba akukabikho itsheki yexabiso lexabiso elinguziro. Ngaphezu koko, ukuba uzama ukutshintsha isixa setyala, iintlawulo aziyi kuhlaziywa.

Amanyathelo okugqibela

Yongeza i-TextWatcher (#16):

iklasi uMsebenzi oPhambili: AppCompatActivity (), Jonga.OnClickListener, TextWatcher {

Emva koko silungise umphulaphuli we-billEditText (#17):

ibhiliEditText.yongezaTextChangedListener(oku)

Kwaye songeza ikhowudi yokwenza i-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) {}

Ukudala i-tip calculator e-Kotlin: isebenza njani?

Ewe, ngoku yonke into iyasebenza! Sivuyisana nawe, ubhale eyakho i-“Tip Calculator” e-Kotlin.

Ukudala i-tip calculator e-Kotlin: isebenza njani?

I-Skillbox iyacebisa:

umthombo: www.habr.com

Yongeza izimvo