Ho aha sebali sa malebela Kotlin: se sebetsa joang?

Ho aha sebali sa malebela Kotlin: se sebetsa joang?

Re u bontša mokhoa oa ho theha ts'ebeliso e bonolo ea malebela Kotlin. E le ho nepahala haholoanyane, Kotlin 1.3.21, Android 4, Android Studio 3. Sehlooho sena se tla thahasellisa, pele ho tsohle, bakeng sa ba qalang leeto la bona ho nts'etsapele lisebelisoa tsa Android. E u lumella ho utloisisa hore na ke eng le hore na e sebetsa joang ka har'a sesebelisoa.

Calculator e joalo e na le thuso ha o hloka ho bala palo ea malebela a k'hamphani e etsang qeto ea ho qeta nako reschorenteng kapa cafe. Ha e le hantle, hase motho e mong le e mong 'me ha a lule a siea tee bakeng sa baepi, sena ke moetlo oa Bophirimela, empa mokhoa oa ho hlahisa kopo e joalo o thahasellisa ho sa tsotellehe boemo leha e le bofe.

Re hopotsa: bakeng sa babali bohle ba "Habr" - theolelo ea li-ruble tse 10 ha u ngolisa thupelong efe kapa efe ea Skillbox u sebelisa khoutu ea papatso ea "Habr".

Skillbox e khothaletsa: Tsela e sebetsang "Mobile Developer PRO.

Mona ke hore na sesebelisoa se shebahala joang ha se sebetsa:

Ho aha sebali sa malebela Kotlin: se sebetsa joang?

U kenya peresente e lakatsehang ea chelete eohle, palo ea barupeluoa sebokeng 'me u fumane sephetho - palo ea malebela a lokelang ho sala.

Qala

Khokahano e felletseng ea app e shebahala tjena:
Ho aha sebali sa malebela Kotlin: se sebetsa joang?

Ho aha sebali sa malebela Kotlin: se sebetsa joang?

Ketso ea pele - download motheo oa morero. E bule ho Android Studio 3.0 kapa hamorao. Re haha ​​le ho tsamaisa morero mme re bona skrine e tšoeu. Ntho e 'ngoe le e 'ngoe e ntle, joalokaha e lokela ho ba joalo.

Ho aha sebali sa malebela Kotlin: se sebetsa joang?

Ho aha sebali sa malebela Kotlin: se sebetsa joang?

Liketso tsa basebelisi li ngotsoe morerong ka tatellano ea liketsahalo, e le hore ntho e 'ngoe le e' ngoe e hlake. Ho e sheba, bula View -> Tool Windows -> TODO.

Re ithuta morero le ho bula mebala.xml ho lekola phalete ea mebala. strings.xml e na le data ea mongolo (litlhaloso), le litaele.xml e na le lithempleite tsa litlhaku tse 'maloa.

Ntlafatso ea Karolo ea Litšenyehelo

Bula activity_main.xml mme o kenye khoutu e ka tlase ho 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"/>

Joale o ka seta buka ea boleng kapa oa bapala ka mebala o sebelisa lisebelisoa.io sesebelisoa.

Joale projeke e shebahala tjena:

Ho aha sebali sa malebela Kotlin: se sebetsa joang?
Joalokaha u ka bona, palo ea litšenyehelo e thehiloe ho data e kentsoeng ke mosebelisi.

Nts'etsopele ea karolo ea akhaonto

Kenya khoutu e ka tlase ho LinearLayout kamora Karolo ea Litšenyehelo (#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>

Koala LinearLayout ka mor'a lethathamo la TODOs, 'me u kenye khoutu e ncha, u e behe ka hare ho 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"/>

Kaha mosebetsi oa mantlha oa kopo ke ho bala litšenyehelo tsa motho ka mong bakeng sa bankakarolo ba bang likopanong tsa reschorenteng, costPerPersonTextView e bapala karolo ea bohlokoa.

EditText e beha meeli moleng o le mong, paramethara ena e tlameha ho hlophisoa ho NumberDecimal inputType.

Ho aha sebali sa malebela Kotlin: se sebetsa joang?
Re qala morero oa tlhahlobo mme re kenya litekanyo tsa tšenyo e felletseng (likopi tse robehileng, lipoleiti, jj.)

Nts'etsopele ea karolo ea "Batho le Malebela".

Ho kenya mokhethoa oa chelete ea malebela, beha khoutu e ka tlase karolong e ncha ea 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>

Sekhechana sena sa khoutu sea hlokahala ho bala chelete ea malebela ka nepo. Boleng ba mongolo oa kamehla ke 20. Li-ImageButtons li fanoa ka litšoantšo ka har'a foldara e nang le tumello ea ho ngola.

Kopitsa karolo kaofela ebe u eketsa tse latelang (#5):

  • Li-IDButton (subtractPeopleButton, addPeopleButton)
  • TextView ID (numberOfPeopleStaticText, numberOfPeopleTextView)
  • DefaultText bakeng sa numberOfPeopleTextView (e lokela ho ba 4).

Ho aha sebali sa malebela Kotlin: se sebetsa joang?

Joale, ha u qala ts'ebeliso, hoa khonahala ho eketsa chelete ea invoice, li-buttons tsa Add / Tlosa le tsona lia sebetsa, empa ho fihlela joale ha ho letho le etsahalang.

Kenya Maikutlo

Bula MainActivity.kt 'me u kenye sena mosebetsing oa 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
 
}

Ho qeta likonopo

Ho kenya ts'ehetso bakeng sa ho tobetsa likonopo, kenya tshebetsong View.OnClickListener maemong a phaposi (#7):

sehlopha sa MainActivity: AppCompatActivity(), View.OnClickListener {

Ho bokella morero hona joale ho ke ke ha sebetsa, o hloka ho etsa mehato e meng e 'maloa (# 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()
        }
    }

Mabapi le li-buttons le li-switches, Kotlin e na le ntho e 'ngoe le e' ngoe e hlophisitsoeng hantle haholo! Kenya khoutu e ka tlase ho mesebetsi eohle ea increment le decrement
(#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()
        }
    }

Mona khoutu e sireletsa mesebetsi ea increment ka boleng bo phahameng (MAX_TIP & MAX_PEOPLE). Ntle le moo, khoutu e sireletsa mesebetsi ea phokotso ka boleng bo tlase (MIN_TIP & MIN_PEOPLE).

Joale re tlama likonopo ho bamameli ho ts'ebetso ea initViews (#13):

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

Ho aha sebali sa malebela Kotlin: se sebetsa joang?

Hona joale o ka eketsa tšenyo eohle, malebela, le palo ea bankakarolo sebokeng. Joale, ntho ea bohlokoa ka ho fetisisa ...

Karolo ea litšenyehelo

Khouto ena e bala litšenyehelo (#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)
 
}

Joale, mona ho bitsoa ts'ebetso e etsang hore ho khonehe ho ela hloko palo ea batho ba k'hamphani le ho bala ntlha (#15):

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

Re qala kopo. E shebahala ebile e sebetsa hantle. Empa ho ka ba betere.

Haeba u leka ho tlosa chelete ea sekoloto ebe u eketsa palo ea malebela kapa metsoalle, sesebelisoa se tla senyeha hobane ha ho na cheke bakeng sa litšenyehelo tsa zero. Ho feta moo, haeba u leka ho fetola chelete ea invoice, litefiso li ke ke tsa ntlafatsoa.

Mehato ea ho qetela

Kenya TextWatcher (#16):

sehlopha sa MainActivity: AppCompatActivity(), View.OnClickListener, TextWatcher {

Ebe re kenya momameli oa BillEditText (#17):

BillEditText.addTextChangedListener(ena)

Hape eketsa khoutu ho sebelisa 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) {}

Ho aha sebali sa malebela Kotlin: se sebetsa joang?

Joale, tsohle lia sebetsa! Kea u lebohela, u ngotse "Tipping Calculator" ea hau Kotlin.

Ho aha sebali sa malebela Kotlin: se sebetsa joang?

Skillbox e khothaletsa:

Source: www.habr.com

Eketsa ka tlhaloso