Isu tinokuudza nzira yekugadzira yakapusa application yekuverenga matipi muKotlin. Kunyanya, Kotlin 1.3.21, Android 4, Android Studio 3. Nyaya yacho ichave inofadza, kutanga kune vose, kune avo vari kutanga rwendo rwavo mukugadzirwa kweAroid application. Inokubvumira kuti unzwisise kuti chii uye kuti chinoshanda sei mukati mekushandisa.
Iyi Calculator ichauya inobatsira kana iwe uchida kuverenga huwandu hwematipi kubva kukambani inosarudza kupedza nguva muresitorendi kana cafe. Ehe, haasi munhu wese anogara achisiya zano kune vanomirira; iyi ndiyo tsika yekuMadokero, asi maitiro ekugadzira akadaro application anonakidza chero zvakadaro.
Tinoyeuchidza: kune vese vaverengi veHabr - a 10 ruble mutengo paunenge uchinyoresa mune chero Skillbox kosi uchishandisa iyo Habr promo kodhi.
Skillbox inokurudzira: Nzira inoshanda
"Mobile developer PRO .
Izvi ndizvo zvinoita senge application iri kushanda:
Iwe unoisa iyo yaunoda muzana yehuwandu hwese, nhamba yevatori vechikamu, uye wowana mhedzisiro - huwandu hwetipi hwaunofanirwa kusiya.
Kutanga
Iyo yakazara application interface inoita seizvi:
Chiito chekutanga -
Zviito zvemushandisi zvinonyorwa mupurojekiti mukutevedzana kwenguva kuti zvese zvive pachena. Kuti uione, vhura Ona -> Tool Windows -> TODO.
Isu tinodzidza chirongwa nekuvhura mavara.xml kuti tiongorore palette yeruvara. strings.xml ine zvinyorwa zvemashoko (siginicha), uye masitayera.xml ine matemplate akati wandei.
Kuvandudza chikamu chemari
Vhura activity_main.xml wowedzera kodhi iri pazasi kune 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"/>
Iye zvino iwe unogona kutaira kukosha kwedhairekitori kana kutamba nemavara uchishandisa
Zvino purojekiti inoita seizvi:
Sezvauri kuona, mari inoverengerwa zvichienderana nedata rakaiswa nemushandisi.
Kuvandudzwa kwechikamu cheakaundi
Wedzera iyo kodhi pazasi kune LinearLayout mushure meMutengo Chikamu (#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>
Isu tinovhara iyo LinearLayout mushure mekunyorwa kweTODO, tobva tawedzera kodhi nyowani, tichiiisa mukati meLinearLayout (#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"/>
Sezvo basa guru rekushandisa ndere kuverenga mutengo wemumwe nemumwe mutori wechikamu mugungano reresitorendi, costPerPersonTextView inoita basa guru.
EditText inoganhura kupinza kumutsara mumwe, iyi parameter inofanirwa kusetwa kuNhambaDecimal inputType.
Isu tinotangisa purojekiti yebvunzo uye tinoisa maparamita ekukuvadza kwakawanda (makapu akatsemuka, mahwendefa, nezvimwewo)
Kuvandudzwa kwechikamu che "Vanhu uye Mazano".
Kuti uwedzere sarudzo yevhoriyamu, isa kodhi pazasi muchikamu chitsva cheLinearLayout (#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>
Ichi chikamu chekodhi chinodiwa kuti uverenge nemazvo mari yetip. Iko kukosha kwemavara ekutanga ndeye 20. ImageButtons anopiwa zvidhori mufolda ine mvumo yekunyora.
Kopa chikamu zvachose uye wowedzera zvinotevera (#5):
- ImageButton ID (bvisaPeopleButton, addPeopleButton)
- TextView ID(nhambaYePeopleStaticText, numberOfPeopleTextView)
- DefaultText yenhambaOfPeopleTextView (inofanira kuva 4).
Ikozvino, paunotanga chishandiso, pane mukana wekuwedzera iyo invoice mari, iyo "Wedzera / Bvisa" mabhatani anoshandawo, asi hapana chinoitika.
Kuwedzera Maonero
Vhura MainActivity.kt wowedzera izvi kune initViews basa (#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
}
Kupedzisa mabhatani
Kuwedzera tsigiro yekudzvanya mabhatani, tinoisa View.OnClickListener padanho rekirasi (#7):
kirasi MainActivity: AppCompatActivity(), View.OnClickListener {
Izvo hazvizogone kuunganidza purojekiti izvozvi; unofanirwa kuita mamwe nhanho mashoma (#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()
}
}
Panyaya yemabhatani uye switch, Kotlin anoronga zvese zvinotonhorera! Wedzera iyo kodhi pazasi kune ese ekuwedzera uye decrement mabasa
(#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()
}
}
Pano iyo kodhi inochengetedza mabasa ekuwedzera ane akanyanya kukosha (MAX_TIP & MAX_PEOPLE). Pamusoro pezvo, iyo kodhi inochengetedza mabasa ekudzikisira ane hudiki kukosha (MIN_TIP & MIN_PEOPLE).
Iye zvino tinosanganisa mabhatani nevateereri mune initViews basa (#13):
private fun initViews() {
...
addTipButton.setOnClickListener(this)
subtractTipButton.setOnClickListener(this)
addPeopleButton.setOnClickListener(this)
subtractPeopleButton.setOnClickListener(this)
//TODO #15: Bind EditText to TextWatcher
}
Iwe zvino unogona kuwedzera kukuvadza kwakazara, matipi, uye nhamba yevatori vechikamu pamusangano. Zvakanaka, zvino chinhu chinonyanya kukosha ...
Chikamu chekuverenga mutengo
Iyi kodhi inoverengera mitengo (#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)
}
Zvakanaka, pano basa rinonzi rinoita kuti zvikwanise kufunga nezvehuwandu hwevanhu mukambani uye kuverenga matipi (#15):
private fun incrementTip() {
β¦
}
private fun decrementTip() {
β¦
}
private fun incrementPeople() {
β¦
}
private fun decrementPeople() {
β¦
}
Ngatitangei application. Inotaridzika uye inoshanda zvikuru. Asi zvingava nani.
Kana iwe ukaedza kubvisa mari yebhiri uye wobva wawedzera huwandu hwematipi kana shamwari, application yacho inopunzika nekuti hapasati pave cheki yemutengo we zero. Uyezve, kana ukaedza kuchinja mari yebhiri, mari yacho haigadziriswe.
Matanho ekupedzisira
Wedzera TextWatcher (#16):
kirasi MainActivity: AppCompatActivity (), View.OnClickListener, TextWatcher {
Tinobva tadzvanya bhiriEditText muteereri (#17):
billEditText.addTextChangedListener(uyu)
Uyezve isu tinowedzera kodhi yekuita 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) {}
Zvakanaka, zvino zvachose zvese zvinoshanda! Makorokoto, iwe wakanyora yako wega "Tip Calculator" muKotlin.
Skillbox inokurudzira:
- Makore maviri anoshanda kosi
"Ini ndiri Web Developer PRO" .- Yepamhepo kosi
"C# mugadziri" .- Kosi yegore rimwechete
"PHP mugadziri kubva 0 kusvika PRO" .
Source: www.habr.com