Tikukuuzani momwe mungapangire pulogalamu yosavuta yowerengera malangizo ku Kotlin. Zowonjezereka, Kotlin 1.3.21, Android 4, Android Studio 3. Nkhaniyi idzakhala yosangalatsa, choyamba, kwa iwo omwe akuyamba ulendo wawo mu chitukuko cha mapulogalamu a Android. Zimakuthandizani kumvetsetsa zomwe ndi momwe zimagwirira ntchito mkati mwa pulogalamuyi.
Chowerengera ichi chidzakuthandizani mukafunika kuwerengera kuchuluka kwa maupangiri kuchokera ku kampani yomwe yasankha kuthera nthawi mu lesitilanti kapena cafe. Zachidziwikire, si aliyense amene amasiya nsonga kwa odikira; izi ndi miyambo yaku Western, koma njira yopangira izi ndi yosangalatsa mulimonse.
Tikukukumbutsani: kwa owerenga onse a Habr - kuchotsera ma ruble 10 polembetsa maphunziro aliwonse a Skillbox pogwiritsa ntchito nambala yotsatsira ya Habr.
Skillbox imalimbikitsa: Njira yothandiza
"Wopanga mafoni PRO .
Umu ndi momwe pulogalamuyi imawonekera ikugwira ntchito:
Mumalowetsa kuchuluka kwa ndalama zonse, kuchuluka kwa omwe atenga nawo gawo, ndikupeza zotsatira - kuchuluka kwa nsonga yomwe muyenera kusiya.
Kuyamba
Mawonekedwe athunthu ogwiritsira ntchito amawoneka motere:
Chochita choyamba -
Zochita za ogwiritsa ntchito zimalembedwa mu projekitiyo motsatira nthawi kuti zonse zimveke bwino. Kuti muwone, tsegulani View -> Chida Windows -> TODO.
Timaphunzira polojekiti ndikutsegula mitundu.xml kuti tiwunikire utoto. strings.xml ili ndi zolemba (ma signature), ndipo styles.xml ili ndi ma template angapo.
Kukula kwa gawo la mtengo
Tsegulani activity_main.xml ndikuwonjezera khodi ili pansipa 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"/>
Tsopano mutha kusanja zolemba zamakhalidwe kapena kusewera ndi mitundu pogwiritsa ntchito
Tsopano polojekitiyi ikuwoneka motere:
Monga mukuwonera, ndalama zimawerengedwa kutengera zomwe wogwiritsa ntchito adalowa.
Kupanga gawo la akaunti
Onjezani nambala yomwe ili pansipa ku LinearLayout pambuyo pa Gawo la Ndalama (#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>
Timatseka LinearLayout pambuyo pa mndandanda wa TODOs, ndikuwonjezera nambala yatsopano, ndikuyiyika mkati mwa 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"/>
Popeza ntchito yayikulu ya pulogalamuyi ndikuwerengera mtengo wamunthu aliyense pagulu lazakudya, costPerPersonTextView imasewera gawo lalikulu.
EditText imachepetsa zolowetsa ku mzere umodzi, gawoli liyenera kukhazikitsidwa kukhala NumberDecimal inputType.
Timakhazikitsa pulojekiti yoyeserera ndikuyika magawo azowonongeka (makapu osweka, mbale, ndi zina).
Kupititsa patsogolo gawo la "Anthu ndi Malangizo".
Kuti muwonjezere voliyumu yosankha, ikani kachidindo pansipa mugawo latsopano la 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>
Gawo ili la code ndilofunika kuti muwerenge molondola kuchuluka kwa nsonga. Mtengo wokhazikika wa mawu ndi 20. ImageButtons amaperekedwa ndi zithunzi mufoda yokhala ndi zilolezo zolembera.
Koperani gawolo kwathunthu ndikuwonjezera zotsatirazi (#5):
- ImageButton ID (chotsaniPeopleButton, addPeopleButton)
- Ma ID a TextView(nambalaOfPeopleStaticText, numberOfPeopleTextView)
- Mawu Osasinthika a numberOfPeopleTextView (ayenera kukhala 4).
Tsopano, mukayambitsa pulogalamuyo, pali mwayi wowonjezera invoice, mabatani a "Add/Subtract" amagwiranso ntchito, koma palibe chomwe chimachitika.
Kuwonjezera Mawonedwe
Tsegulani MainActivity.kt ndikuwonjezera izi ku initViews ntchito (#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
}
Kumaliza mabatani
Kuti muwonjezere chithandizo pakudina mabatani, timayika View.OnClickListener pamlingo wakalasi (#7):
kalasi MainActivity: AppCompatActivity(), View.OnClickListener {
Sizingatheke kuphatikizira pulojekitiyi pakali pano; muyenera kuchitanso masitepe angapo (#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()
}
}
Pankhani ya mabatani ndi masinthidwe, Kotlin amakonza zonse zabwino kwambiri! Onjezani nambala yomwe ili pansipa pazowonjezera zonse ndi zochepetsera
(#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()
}
}
Apa khodiyo imateteza ntchito zowonjezera zomwe zili ndimtengo wapatali (MAX_TIP & MAX_PEOPLE). Kuphatikiza apo, nambalayi imateteza magwiridwe antchito ndi zikhalidwe zochepa (MIN_TIP & MIN_PEOPLE).
Tsopano timayanjanitsa mabataniwo ndi omvera mu initViews ntchito (#13):
private fun initViews() {
...
addTipButton.setOnClickListener(this)
subtractTipButton.setOnClickListener(this)
addPeopleButton.setOnClickListener(this)
subtractPeopleButton.setOnClickListener(this)
//TODO #15: Bind EditText to TextWatcher
}
Tsopano mutha kuwonjezera zowonongeka, maupangiri, ndi kuchuluka kwa omwe atenga nawo mbali pamisonkhano. Chabwino, tsopano chinthu chofunikira kwambiri ...
Gawo lowerengera mtengo
Khodi iyi imawerengera mtengo (#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)
}
Chabwino, apa ntchito imatchedwa yomwe imapangitsa kuti zitheke kuganizira kuchuluka kwa anthu pakampani ndikuwerengera malangizo (#15):
private fun incrementTip() {
β¦
}
private fun decrementTip() {
β¦
}
private fun incrementPeople() {
β¦
}
private fun decrementPeople() {
β¦
}
Tiyeni tiyambitse pulogalamuyi. Zikuwoneka komanso zimagwira ntchito bwino. Koma zingakhale bwinoko.
Mukayesa kuchotsa ndalamazo ndikuwonjezera maupangiri kapena abwenzi, pulogalamuyi idzagwa chifukwa palibe cheke pamtengo wa ziro. Komanso, ngati mutayesa kusintha ndalamazo, zolipiritsa sizidzasinthidwa.
Masitepe omaliza
Onjezani TextWatcher (#16):
kalasi MainActivity: AppCompatActivity (), View.OnClickListener, TextWatcher {
Kenako timayika omvera a BillEditText (#17):
billEditText.addTextChangedListener(izi)
Komanso timawonjezera nambala kuti tigwiritse ntchito 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) {}
Chabwino, tsopano zonse mwamtheradi ntchito! Zabwino kwambiri, mwalemba "Tip Calculator" yanu ku Kotlin.
Skillbox imalimbikitsa:
- Zaka ziwiri zothandiza maphunziro
"Ndine Pro Web Developer PRO" .- Njira yapaintaneti
"C # wopanga" .- Maphunziro othandiza a chaka chimodzi
"Wopanga PHP kuchokera ku 0 kupita ku PRO" .
Source: www.habr.com