Sikukhombisa ukuthi ulwakha kanjani uhlelo lokusebenza lokubala lwethiphu olulula e-Kotlin. Ukuze ucacise kabanzi, i-Kotlin 1.3.21, i-Android 4, i-Android Studio 3. Isihloko sizothakazelisa, okokuqala, kulabo abaqala uhambo lwabo ekuthuthukiseni izinhlelo zokusebenza ze-Android. Ikuvumela ukuthi uqonde ukuthi yini nokuthi isebenza kanjani ngaphakathi kohlelo lokusebenza.
I-calculator enjalo iyasiza uma udinga ukubala inani lamathiphu avela enkampanini enquma ukuchitha isikhathi endaweni yokudlela noma e-cafe. Yiqiniso, akuwona wonke umuntu futhi akashiyi itiye njalo kubalindi, lokhu kungokwesiko laseNtshonalanga, kodwa inqubo yokuthuthukisa isicelo esinjalo iyathakazelisa kunoma yikuphi.
Siyakukhumbuza: kubo bonke abafundi be-"Habr" - isaphulelo sama-ruble angu-10 lapho ubhalisa kunoma yisiphi isifundo se-Skillbox usebenzisa ikhodi yephromoshini ethi "Habr".
I-Skillbox iyancoma: Isifundo esiwusizo
"I-Mobile Developer PRO .
Nakhu ukuthi uhlelo lokusebenza lubukeka kanjani uma lusebenza:
Ufaka iphesenti oyifunayo yenani eliphelele, inani labahlanganyeli emhlanganweni futhi uthole umphumela - inani lamathiphu okufanele ashiywe.
Ukuqalisa
Ukuxhumana okugcwele kohlelo lokusebenza kubukeka kanje:
Isenzo sokuqala -
Izenzo zabasebenzisi zibhalwa kuphrojekthi ngokulandelana kwezikhathi, ukuze yonke into icace. Ukuze uyibuke, vula okuthi Buka -> Ithuluzi leWindows -> TODO.
Sitadisha iphrojekthi bese sivula imibala.xml ukuze sihlole iphalethi yombala. strings.xml iqukethe idatha yombhalo (amagama-ncazo), kanye nezitayela.xml iqukethe izifanekiso zefonti ezimbalwa.
Ukuthuthukiswa Kwesigaba Sezindleko
Vula umsebenzi_main.xml bese wengeza ikhodi engezansi ku-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"/>
Manje usungabhala uhlu lwamanani noma udlale ngemibala usebenzisa
Manje iphrojekthi ibukeka kanje:
Njengoba ubona, ukubalwa kwezindleko kusekelwe kudatha efakwe umsebenzisi.
Ukuthuthukiswa kwesigaba se-akhawunti
Engeza ikhodi engezansi ku-LinearLayout ngemva Kwesigaba Sezindleko (#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>
Vala i-LinearLayout ngemva kohlu lwe-TODO, bese wengeza ikhodi entsha, uyibeke 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"/>
Njengoba umsebenzi oyinhloko wohlelo lokusebenza ukubala izindleko zomuntu ngamunye wabahlanganyeli embuthanweni endaweni yokudlela, i-costPerPersonTextView idlala indima enkulu.
Hlela umbhalo ofaka imikhawulo emugqeni owodwa, le pharamitha kufanele isethelwe ku-NumberDecimal inputType.
Siqala iphrojekthi yokuhlolwa bese sifaka imingcele yomonakalo ophelele (izinkomishi eziphukile, amapuleti, njll.)
Ukuthuthukiswa kwesigaba "Abantu Namathiphu".
Ukwengeza isikhethi senani lethiphu, namathisela ikhodi engezansi esigabeni esisha se-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>
Lolu cezu lwekhodi luyadingeka ukuze kubalwe ngokunembile inani lethiphu. Inani lombhalo elizenzakalelayo lingu-20. Ama-ImageButton anikezwa izithonjana kufolda enezimvume zokubhala.
Kopisha sonke isigaba bese wengeza okulandelayo (#5):
- I-ImageButton id (susaInkinobho Yabantu, engezaInkinobho Yabantu)
- I-TextView ID (inomboloOfPeopleStaticText, numberOfPeopleTextView)
- OkuzenzakalelayoUmbhalo wenomboloOfPeopleTextView (kufanele kube ngu-4).
Manje, lapho uqala uhlelo lokusebenza, kungenzeka ukwengeza inani le-invoyisi, izinkinobho zokungeza / Susa nazo ziyasebenza, kodwa kuze kube manje akukho okwenzekayo.
Engeza Ukubuka
Vula i-MainActivity.kt bese wengeza lokhu 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
}
Eqeda izinkinobho
Ukuze ungeze usekelo lokuchofoza izinkinobho, sebenzisa okuthi View.OnClickListener ezingeni lekilasi (#7):
class MainActivity: AppCompatActivity(), View.OnClickListener {
Ukuhlanganisa iphrojekthi njengamanje ngeke kusebenze, udinga ukwenza ezinye izinyathelo ezimbalwa (# 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()
}
}
Mayelana nezinkinobho nokushintsha, i-Kotlin inakho konke okuhlelwe kahle kakhulu! Engeza ikhodi engezansi kuyo yonke imisebenzi yokwengeza nokwehlisa
(#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()
}
}
Lapha ikhodi ivikela imisebenzi yokukhuphuka ngamavelu aphezulu (MAX_TIP & MAX_PEOPLE). Ngaphezu kwalokho, ikhodi ivikela imisebenzi yokwehlisa ngamanani amancane (MIN_TIP & MIN_PEOPLE).
Manje sibopha izinkinobho kubalaleli 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
}
Manje ungangeza umonakalo ophelele, amathiphu, nenombolo yabahlanganyeli bomhlangano. Manje, into ebaluleke kakhulu ...
Isigaba sezindleko
Le khodi ibala izindleko (#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)
}
Hhayi-ke, lapha kubizwa umsebenzi owenza kube nokwenzeka ukucabangela inani labantu enkampanini futhi ubale ithiphu (#15):
private fun incrementTip() {
…
}
private fun decrementTip() {
…
}
private fun incrementPeople() {
…
}
private fun decrementPeople() {
…
}
Sethula uhlelo lokusebenza. Ibukeka futhi isebenza kahle. Kodwa kungaba ngcono.
Uma uzama ukususa inani lebhili bese ukhuphula inani lamacebo noma abangani, uhlelo lokusebenza luzophahlazeka ngoba alikho isheke lezindleko eziziro okwamanje. Ngaphezu kwalokho, uma uzama ukushintsha inani le-invoyisi, izindleko ngeke zibuyekezwe.
Izinyathelo zokugcina
Engeza i-TextWatcher (#16):
class MainActivity: AppCompatActivity(), View.OnClickListener, TextWatcher {
Bese sishumeka umlaleli we-billEditText (#17):
billEditText.addTextChangedListener(lokhu)
Futhi engeza ikhodi ukuze usebenzise 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) {}
Yebo, manje konke kuyasebenza! Siyakuhalalisela, ubhale eyakho i-"Tipping Calculator" e-Kotlin.
I-Skillbox iyancoma:
- Isifundo sokwenza iminyaka emibili
"Ngingunjiniyela wewebhu we-PRO" .- Inkambo eku-inthanethi
"C# umthuthukisi" .- Isifundo sonyaka esisebenzayo
"Unjiniyela we-PHP kusuka ku-0 kuye ku-PRO" .
Source: www.habr.com