Nyiptakeun kalkulator tip di Kotlin: kumaha jalanna?

Nyiptakeun kalkulator tip di Kotlin: kumaha jalanna?

Kami nunjukkeun anjeun kumaha cara ngadamel aplikasi itungan tip saderhana di Kotlin. Janten langkung tepat, Kotlin 1.3.21, Android 4, Android Studio 3. Tulisan éta bakal pikaresepeun, mimitina, pikeun anu ngamimitian perjalanan dina ngamekarkeun aplikasi Android. Éta ngamungkinkeun anjeun ngartos naon sareng kumaha jalanna di jero aplikasi.

Kalkulator sapertos mangpaat nalika anjeun kedah ngitung jumlah tip ti perusahaan anu mutuskeun nyéépkeun waktos di réstoran atanapi kafe. Tangtosna, henteu sadayana sareng henteu salawasna nyéépkeun tèh pikeun palayan, ieu langkung ti tradisi Kulon, tapi prosés ngembangkeun aplikasi sapertos kitu pikaresepeun dina sagala hal.

Kami ngingetan: pikeun sakabéh pamiarsa "Habr" - diskon 10 rubles nalika enrolling dina sagala Tangtu Skillbox ngagunakeun "Habr" kode promosi.

Skillbox nyarankeun: Kursus praktis "Pamekar Mobile PRO.

Ieu kumaha rupa aplikasi dina operasi:

Nyiptakeun kalkulator tip di Kotlin: kumaha jalanna?

Anjeun asupkeun persentase dipikahoyong tina jumlah total, jumlah pamilon dina rapat jeung meunang hasilna - jumlah tips nu kudu ditinggalkeun.

Mimiti

Antarbeungeut aplikasi lengkep sapertos kieu:
Nyiptakeun kalkulator tip di Kotlin: kumaha jalanna?

Nyiptakeun kalkulator tip di Kotlin: kumaha jalanna?

Aksi munggaran - undeuran basis proyék. Buka dina Android Studio 3.0 atanapi engké. Urang ngawangun sareng ngajalankeun proyék sareng ningali layar bodas. Sagalana rupa, sakumaha kuduna.

Nyiptakeun kalkulator tip di Kotlin: kumaha jalanna?

Nyiptakeun kalkulator tip di Kotlin: kumaha jalanna?

Lampah pamaké ditulis dina proyék dina urutan kronologis sangkan sagalana jelas. Pikeun ningali éta, buka View -> Tool Windows -> TODO.

Urang diajar proyek tur muka colors.xml pikeun evaluate palette warna. strings.xml ngandung data téks (captions), sarta styles.xml ngandung sababaraha témplat font.

Pangwangunan Bagian Biaya

Buka activity_main.xml sareng tambahkeun kodeu di handap kana 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"/>

Ayeuna anjeun tiasa gaya diréktori nilai atanapi maén nganggo warna alat material.io.

Ayeuna proyékna sapertos kieu:

Nyiptakeun kalkulator tip di Kotlin: kumaha jalanna?
Sakumaha anjeun tiasa tingali, biaya diitung dumasar kana data anu diasupkeun ku pangguna.

Ngembangkeun bagian akun

Tambihkeun kode di handap kana LinearLayout saatos Bagéan Biaya (#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>

Urang nutup LinearLayout sanggeus daptar TODOs, lajeng nambahkeun kode anyar, nempatkeun eta di jero 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"/>

Kusabab tugas utama aplikasi nyaéta ngitung biaya individu pikeun tiap pamilon dina rapat réstoran, costPerPersonTextView maénkeun peran utama.

EditText ngawatesan input ka hiji garis, parameter ieu kudu disetel ka NumberDecimal inputType.

Nyiptakeun kalkulator tip di Kotlin: kumaha jalanna?
Kami ngaluncurkeun proyék pikeun tés sareng lebetkeun parameter pikeun karusakan umum (cangkir rusak, piring, jsb.)

Ngembangkeun bagian "Jalma sareng Tip".

Pikeun nambihan pamilih jumlah tip, témpél kodeu di handap kana bagian LinearLayout énggal (#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>

Sapotong kode ieu diperlukeun pikeun akurat ngitung jumlah tip. Nilai téks standar nyaéta 20. ImageButtons disadiakeun kalawan ikon dina folder kalawan idin nulis.

Salin sadayana bagian sareng tambahkeun ieu (#5):

  • ID ImageButton (tolakPeopleButton, addPeopleButton)
  • TextView id (numberOfPeopleStaticText, numberOfPeopleTextView)
  • DefaultText pikeun numberOfPeopleTextView (kedahna 4).

Nyiptakeun kalkulator tip di Kotlin: kumaha jalanna?

Ayeuna, nalika anjeun ngaluncurkeun aplikasi, aya kasempetan pikeun nambihan jumlah invoice, tombol "Tambahkeun / Ngurangan" ogé tiasa dianggo, tapi teu aya anu kajantenan.

Tambahkeun Views

Buka MainActivity.kt sareng tambahkeun ieu kana fungsi 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
 
}

Ngabéréskeun tombol

Pikeun nambihan dukungan pikeun klik tombol, laksanakeun View.OnClickListener di tingkat kelas (#7):

kelas MainActivity: AppCompatActivity(), View.OnClickListener {

Éta moal mungkin pikeun nyusun proyék ayeuna; anjeun kedah ngalakukeun sababaraha léngkah deui (#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()
        }
    }

Dina hal tombol sareng saklar, Kotlin gaduh sadayana diatur pisan! Tambahkeun kode di handap pikeun sakabéh increment na decrement fungsi
(#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()
        }
    }

Di dieu kode ngajaga fungsi increment kalayan nilai maksimum (MAX_TIP & MAX_PEOPLE). Salaku tambahan, kode ngajaga fungsi pangurangan kalayan nilai minimum (MIN_TIP & MIN_PEOPLE).

Ayeuna urang ngahubungkeun tombol sareng pendengar dina fungsi initViews (#13):

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

Nyiptakeun kalkulator tip di Kotlin: kumaha jalanna?

Anjeun ayeuna tiasa nambihan total karusakan, tip, sareng jumlah pamilon rapat. Nya, ayeuna anu paling penting ...

bagian ongkos

Kode ieu ngitung biaya (#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)
 
}

Nya, di dieu disebut fungsi anu ngamungkinkeun pikeun ngitung jumlah jalma di perusahaan sareng ngitung tip (#15):

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

Hayu urang ngajalankeun aplikasi. Sigana na jalan hébat. Tapi tiasa langkung saé.

Upami anjeun nyobian ngahapus jumlah tagihan teras ningkatkeun jumlah pitunjuk atanapi réréncangan, aplikasina bakal ngadat sabab teu acan aya cek pikeun biaya nol. Sumawona, upami anjeun nyobian ngarobih jumlah invoice, biayana moal diropéa.

Léngkah ahir

Tambahkeun TextWatcher (#16):

Kelas MainActivity: AppCompatActivity(), View.OnClickListener, TextWatcher {

Teras we lebetkeun pangdéngé billEditText (#17):

billEditText.addTextChangedListener(ieu)

Tambihan tambihan kodeu pikeun ngaéksekusi 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) {}

Nyiptakeun kalkulator tip di Kotlin: kumaha jalanna?

Muhun, ayeuna sagalana jalan! Wilujeng, anjeun parantos nyerat "Kalkulator Tipping" anjeun sorangan dina Kotlin.

Nyiptakeun kalkulator tip di Kotlin: kumaha jalanna?

Skillbox nyarankeun:

sumber: www.habr.com

Tambahkeun komentar