Котлин дээр зөвлөмжийн тооцоолуур үүсгэх: энэ нь хэрхэн ажилладаг вэ?

Котлин дээр зөвлөмжийн тооцоолуур үүсгэх: энэ нь хэрхэн ажилладаг вэ?

Котлин дахь зөвлөмжийг тооцоолох энгийн програмыг хэрхэн үүсгэхийг бид танд хэлж байна. Илүү нарийвчлалтай, Kotlin 1.3.21, Android 4, Android Studio 3. Нийтлэл нь юуны түрүүнд Андройд програм хөгжүүлэх аялалаа эхлүүлж буй хүмүүст сонирхолтой байх болно. Энэ нь програм дотор юу, хэрхэн ажилладагийг ойлгох боломжийг танд олгоно.

Ресторан эсвэл кафед цаг зарцуулахаар шийдсэн компаниас өгсөн зөвлөмжийн хэмжээг тооцоолоход энэ тооцоолуур хэрэг болно. Мэдээжийн хэрэг, хүн бүр зөөгч нарт зөвлөгөө өгдөггүй, энэ нь барууны уламжлал боловч ийм програмыг боловсруулах үйл явц нь ямар ч тохиолдолд сонирхолтой байдаг.

Бид танд сануулж байна: "Хабр" -ын бүх уншигчдад - "Habr" сурталчилгааны кодыг ашиглан Skillbox-ын аль ч курст бүртгүүлэхдээ 10 рублийн хөнгөлөлт.

Skillbox зөвлөж байна: Практик курс "Мобайл хөгжүүлэгч PRO.

Аппликешн ажиллаж байхдаа иймэрхүү харагдаж байна:

Котлин дээр зөвлөмжийн тооцоолуур үүсгэх: энэ нь хэрхэн ажилладаг вэ?

Та нийт дүнгийн хүссэн хувь, уулзалтад оролцогчдын тоог оруулаад үр дүнг нь - таны үлдээх ёстой мөнгөний хэмжээг авна.

Эхлэх

Бүрэн програмын интерфейс дараах байдалтай байна.
Котлин дээр зөвлөмжийн тооцоолуур үүсгэх: энэ нь хэрхэн ажилладаг вэ?

Котлин дээр зөвлөмжийн тооцоолуур үүсгэх: энэ нь хэрхэн ажилладаг вэ?

Эхний үйлдэл - төслийн суурийг татаж авах. Үүнийг Android Studio 3.0 эсвэл түүнээс дээш хувилбар дээр нээнэ үү. Бид төслийг барьж, эхлүүлж, цагаан дэлгэц харагдана. Бүх зүйл сайхан байна, ийм байх ёстой.

Котлин дээр зөвлөмжийн тооцоолуур үүсгэх: энэ нь хэрхэн ажилладаг вэ?

Котлин дээр зөвлөмжийн тооцоолуур үүсгэх: энэ нь хэрхэн ажилладаг вэ?

Бүх зүйлийг тодорхой болгохын тулд хэрэглэгчийн үйлдлийг төсөлд он цагийн дарааллаар бичсэн болно. Үүнийг үзэхийн тулд View -> Tool Windows -> TODO хэсгийг нээнэ үү.

Бид төслийг судалж, өнгөт палитрыг үнэлэхийн тулд color.xml-г нээдэг. strings.xml нь текст өгөгдөл (гарын үсэг), styles.xml нь хэд хэдэн фонтын загваруудыг агуулдаг.

Зардлын хэсгийг боловсруулах

Activity_main.xml-г нээгээд доорх кодыг 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"/>

Одоо та утгын лавлахыг загварчлах эсвэл өнгөөр ​​тоглох боломжтой material.io хэрэгсэл.

Одоо төсөл дараах байдалтай байна.

Котлин дээр зөвлөмжийн тооцоолуур үүсгэх: энэ нь хэрхэн ажилладаг вэ?
Таны харж байгаагаар зардлыг хэрэглэгчийн оруулсан өгөгдөл дээр үндэслэн тооцдог.

Бүртгэлийн хэсгийг хөгжүүлэх

Зардлын хэсгийн (№2) дараа LinearLayout дээр доорх кодыг нэмнэ үү:

<LinearLayout
    android_layout_width="match_parent"
    android_layout_height="match_parent"
    android_orientation="vertical"
    android_background="@color/colorAccent">
 
<! — TODO #3: Build Bill Section →
 
… 
</LinearLayout>

Бид TODO-уудын жагсаалтын дараа LinearLayout-ийг хааж, дараа нь 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"/>

Програмын гол ажил бол рестораны цугларалтанд оролцогч бүрийн зардлыг тооцоолох явдал тул costPerPersonTextView гол үүрэг гүйцэтгэдэг.

EditText нь оролтыг нэг мөрөнд хязгаарладаг бөгөөд энэ параметрийг NumberDecimal inputType гэж тохируулсан байх ёстой.

Котлин дээр зөвлөмжийн тооцоолуур үүсгэх: энэ нь хэрхэн ажилладаг вэ?
Бид туршилтын төслийг эхлүүлж, ерөнхий гэмтлийн параметрүүдийг (эвдэрсэн аяга, таваг гэх мэт) оруулна.

"Хүмүүс ба зөвлөмж" хэсгийг боловсруулах

Тайлбарын хэмжээг сонгохын тулд доорх кодыг шинэ 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>

Кодын энэ хэсэг нь зоосны хэмжээг зөв тооцоолоход шаардлагатай. Текстийн өгөгдмөл утга нь 20. ImageButtons нь бичих зөвшөөрөлтэй хавтсанд байгаа дүрсүүдээр хангагдсан байдаг.

Хэсгийг бүрэн хуулж аваад дараахыг нэмнэ үү (№5):

  • ImageButton ID (subtractPeopleButton, addPeopleButton)
  • TextView ids(numberOfPeopleStaticText, numberOfPeopleTextView)
  • numberOfPeopleTextView-д зориулсан DefaultText (4 байх ёстой).

Котлин дээр зөвлөмжийн тооцоолуур үүсгэх: энэ нь хэрхэн ажилладаг вэ?

Одоо та програмыг ажиллуулахад нэхэмжлэхийн дүнг нэмэх боломжтой, "Нэмэх/Хасах" товчлуурууд бас ажиллаж байгаа боловч юу ч болоогүй байна.

Үзэх тоог нэмж байна

MainActivity.kt-ийг нээж, үүнийг 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
 
}

Товчлууруудыг дуусгаж байна

Товчлуур дээр дарахад дэмжлэг үзүүлэхийн тулд бид View.OnClickListener-ийг ангийн түвшинд хэрэгжүүлдэг (#7):

Class MainActivity: AppCompatActivity(), View.OnClickListener {

Төслийг яг одоо эмхэтгэх боломжгүй; та хэд хэдэн алхам хийх хэрэгтэй (#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()
        }
    }

Товчлуур болон унтраалгын хувьд Котлин бүх зүйлийг маш сайхан зохион байгуулдаг! Доорх кодыг бүх нэмэгдүүлэх, багасгах функцүүдэд нэмнэ үү
(#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()
        }
    }

Энд код нь өсөлтийн функцийг хамгийн их утгатай (MAX_TIP & MAX_PEOPLE) хамгаалдаг. Нэмж дурдахад код нь багасгах функцийг хамгийн бага утгатай (MIN_TIP & MIN_PEOPLE) хамгаалдаг.

Одоо бид initViews функц дээрх товчлууруудыг сонсогчидтой холбодог (#13):

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

Котлин дээр зөвлөмжийн тооцоолуур үүсгэх: энэ нь хэрхэн ажилладаг вэ?

Та одоо нийт хохирол, зөвлөгөө, уулзалтад оролцогчдын тоог нэмэх боломжтой. За, одоо хамгийн чухал зүйл бол ...

Зардлын тооцооны хэсэг

Энэ код нь зардлыг тооцдог (#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)
 
}

За, энд компанид байгаа хүмүүсийн тоог харгалзан үзэх, зөвлөмжийг тооцоолох боломжтой функц гэж нэрлэгддэг (№15):

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

Програмаа ажиллуулцгаая. Энэ нь гайхалтай харагдаж, ажилладаг. Гэхдээ энэ нь илүү дээр байж болох юм.

Хэрэв та төлбөрийн дүнг хасаад дараа нь зөвлөгөө эсвэл найз нөхдийнхөө тоог нэмэгдүүлэхийг оролдвол тэг зардлын утгыг шалгах хараахан байхгүй тул програм гацах болно. Түүнчлэн, хэрэв та төлбөрийн дүнг өөрчлөхийг оролдвол төлбөр шинэчлэгдэхгүй.

Эцсийн алхамууд

TextWatcher нэмэх (#16):

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

Дараа нь бид billEditText сонсогчийг суулгасан (#17):

billEditText.addTextChangedListener(энэ)

Дээрээс нь бид 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) {}

Котлин дээр зөвлөмжийн тооцоолуур үүсгэх: энэ нь хэрхэн ажилладаг вэ?

За, одоо үнэхээр бүх зүйл ажиллаж байна! Баяр хүргэе, та Котлин хэл дээр өөрийн "Зөвлөгөөний тооцоолуур" бичсэн байна.

Котлин дээр зөвлөмжийн тооцоолуур үүсгэх: энэ нь хэрхэн ажилладаг вэ?

Skillbox зөвлөж байна:

Эх сурвалж: www.habr.com

сэтгэгдэл нэмэх