కోట్లిన్‌లో చిట్కా కాలిక్యులేటర్‌ను సృష్టిస్తోంది: ఇది ఎలా పని చేస్తుంది?

కోట్లిన్‌లో చిట్కా కాలిక్యులేటర్‌ను సృష్టిస్తోంది: ఇది ఎలా పని చేస్తుంది?

కోట్లిన్‌లో చిట్కాలను లెక్కించడానికి సరళమైన అప్లికేషన్‌ను ఎలా సృష్టించాలో మేము మీకు చెప్తాము. మరింత ఖచ్చితంగా చెప్పాలంటే, కోట్లిన్ 1.3.21, ఆండ్రాయిడ్ 4, ఆండ్రాయిడ్ స్టూడియో 3. ఆండ్రాయిడ్ అప్లికేషన్ డెవలప్‌మెంట్‌లో తమ ప్రయాణాన్ని ప్రారంభించే వారికి ఆర్టికల్ ఆసక్తికరంగా ఉంటుంది. ఇది అప్లికేషన్ లోపల ఏమి మరియు ఎలా పనిచేస్తుందో అర్థం చేసుకోవడానికి మిమ్మల్ని అనుమతిస్తుంది.

మీరు రెస్టారెంట్ లేదా కేఫ్‌లో సమయం గడపాలని నిర్ణయించుకునే కంపెనీ నుండి చిట్కాల మొత్తాన్ని లెక్కించాల్సిన అవసరం వచ్చినప్పుడు ఈ కాలిక్యులేటర్ ఉపయోగపడుతుంది. వాస్తవానికి, ప్రతి ఒక్కరూ ఎల్లప్పుడూ వెయిటర్లకు చిట్కాను వదిలివేయరు; ఇది పాశ్చాత్య సంప్రదాయం, కానీ అలాంటి అప్లికేషన్‌ను అభివృద్ధి చేసే ప్రక్రియ ఏ సందర్భంలోనైనా ఆసక్తికరంగా ఉంటుంది.

మేము గుర్తు చేస్తున్నాము: Habr పాఠకులందరికీ - Habr ప్రోమో కోడ్‌ని ఉపయోగించి ఏదైనా Skillbox కోర్సులో నమోదు చేసుకున్నప్పుడు 10 రూబుల్ తగ్గింపు.

Skillbox సిఫార్సు చేస్తోంది: ప్రాక్టికల్ కోర్సు "మొబైల్ డెవలపర్ PRO.

అప్లికేషన్ ఆపరేషన్‌లో ఇలా కనిపిస్తుంది:

కోట్లిన్‌లో చిట్కా కాలిక్యులేటర్‌ను సృష్టిస్తోంది: ఇది ఎలా పని చేస్తుంది?

మీరు మొత్తం మొత్తంలో కావలసిన శాతం, సమావేశంలో పాల్గొనేవారి సంఖ్యను నమోదు చేసి, ఫలితాన్ని పొందండి - మీరు వదిలివేయవలసిన చిట్కా మొత్తం.

ప్రారంభించడం

పూర్తి అప్లికేషన్ ఇంటర్ఫేస్ ఇలా కనిపిస్తుంది:
కోట్లిన్‌లో చిట్కా కాలిక్యులేటర్‌ను సృష్టిస్తోంది: ఇది ఎలా పని చేస్తుంది?

కోట్లిన్‌లో చిట్కా కాలిక్యులేటర్‌ను సృష్టిస్తోంది: ఇది ఎలా పని చేస్తుంది?

మొదటి చర్య - ప్రాజెక్ట్ బేస్ డౌన్‌లోడ్ చేస్తోంది. దీన్ని Android Studio 3.0 లేదా తర్వాతి వెర్షన్‌లో తెరవండి. మేము ప్రాజెక్ట్‌ను నిర్మించి ప్రారంభించాము మరియు తెల్లటి స్క్రీన్‌ని చూస్తాము. అంతా బాగానే ఉంది, అలా ఉండాలి.

కోట్లిన్‌లో చిట్కా కాలిక్యులేటర్‌ను సృష్టిస్తోంది: ఇది ఎలా పని చేస్తుంది?

కోట్లిన్‌లో చిట్కా కాలిక్యులేటర్‌ను సృష్టిస్తోంది: ఇది ఎలా పని చేస్తుంది?

వినియోగదారు చర్యలు ప్రతిదీ స్పష్టంగా చేయడానికి కాలక్రమానుసారం ప్రాజెక్ట్‌లో వ్రాయబడ్డాయి. దీన్ని వీక్షించడానికి, View -> Tool Windows -> TODO తెరవండి.

మేము ప్రాజెక్ట్‌ను అధ్యయనం చేస్తాము మరియు రంగుల పాలెట్‌ను మూల్యాంకనం చేయడానికి color.xmlని తెరుస్తాము. strings.xmlలో టెక్స్ట్ డేటా (సంతకాలు) ఉన్నాయి మరియు styles.xml అనేక ఫాంట్ టెంప్లేట్‌లను కలిగి ఉంది.

ఖర్చు విభాగం అభివృద్ధి

activity_main.xmlని తెరిచి, దిగువ కోడ్‌ను లీనియర్ లేఅవుట్ (#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
    android_layout_width="match_parent"
    android_layout_height="match_parent"
    android_orientation="vertical"
    android_background="@color/colorAccent">
 
<! — TODO #3: Build Bill Section →
 
… 
</LinearLayout>

మేము TODOల జాబితా తర్వాత లీనియర్ లేఅవుట్‌ను మూసివేసి, ఆపై కొత్త కోడ్‌ని జోడించి, దానిని లీనియర్‌లేఅవుట్ (#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కి సెట్ చేయాలి.

కోట్లిన్‌లో చిట్కా కాలిక్యులేటర్‌ను సృష్టిస్తోంది: ఇది ఎలా పని చేస్తుంది?
మేము పరీక్ష కోసం ప్రాజెక్ట్‌ను ప్రారంభించాము మరియు సాధారణ నష్టం కోసం పారామితులను నమోదు చేస్తాము (విరిగిన కప్పులు, ప్లేట్లు మొదలైనవి)

"వ్యక్తులు మరియు చిట్కాలు" విభాగం అభివృద్ధి

చిట్కా వాల్యూమ్ ఎంపికను జోడించడానికి, దిగువ కోడ్‌ను కొత్త లీనియర్ లేఅవుట్ విభాగంలో (#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. వ్రాత అనుమతులు ఉన్న ఫోల్డర్‌లో ఇమేజ్‌బటన్‌లు చిహ్నాలతో అందించబడతాయి.

విభాగాన్ని పూర్తిగా కాపీ చేసి, కింది వాటిని జోడించండి (#5):

  • ఇమేజ్‌బటన్ ఐడిలు (వ్యవకలనం పీపుల్‌బటన్, యాడ్ పీపుల్‌బటన్)
  • TextView idలు(numberOfPeopleStaticText, numberOfPeopleTextView)
  • numberOfPeopleTextView కోసం డిఫాల్ట్‌టెక్స్ట్ (తప్పక 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
 
}

బటన్లను పూర్తి చేస్తోంది

బటన్ క్లిక్‌లకు మద్దతును జోడించడానికి, మేము తరగతి స్థాయిలో (#7) View.OnClickListenerని అమలు చేస్తాము:

తరగతి ప్రధాన కార్యాచరణ: 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() {
 
…
 
}

అప్లికేషన్‌ను ప్రారంభిద్దాం. ఇది అద్భుతంగా కనిపిస్తుంది మరియు పని చేస్తుంది. కానీ అది మంచి కావచ్చు.

మీరు బిల్లు మొత్తాన్ని తీసివేసి, ఆపై చిట్కాలు లేదా స్నేహితుల సంఖ్యను పెంచడానికి ప్రయత్నిస్తే, సున్నా ధర విలువకు ఇంకా చెక్ లేనందున అప్లికేషన్ క్రాష్ అవుతుంది. అంతేకాదు, మీరు బిల్లు మొత్తాన్ని మార్చడానికి ప్రయత్నిస్తే, ఛార్జీలు అప్‌డేట్ చేయబడవు.

చివరి దశలు

టెక్స్ట్‌వాచర్‌ని జోడించండి (#16):

తరగతి ప్రధాన కార్యాచరణ: 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

ఒక వ్యాఖ్యను జోడించండి