Manangana kajy fika ao amin'ny Kotlin: ahoana no fiasan'izy io?

Manangana kajy fika ao amin'ny Kotlin: ahoana no fiasan'izy io?

Lazainay aminao ny fomba hamoronana fampiharana tsotra amin'ny kajy toro-hevitra ao amin'ny Kotlin. Ny marimarina kokoa, Kotlin 1.3.21, Android 4, Android Studio 3. Ny lahatsoratra dia hahaliana, voalohany indrindra, ho an'ireo izay manomboka ny diany amin'ny fampandrosoana ny fampiharana Android. Mamela anao hahatakatra ny zavatra sy ny fomba fiasa ao anatin'ny fampiharana izany.

Ity kajy ity dia ho azo ampiasaina rehefa mila manao kajy ny habetsaky ny toro-hevitra avy amin'ny orinasa iray izay manapa-kevitra ny handany fotoana ao amin'ny trano fisakafoanana na kafe. Mazava ho azy fa tsy ny olon-drehetra no mamela tetika ho an'ny mpandroso sakafo; ity dia fomban-drazana tandrefana kokoa, fa ny dingana amin'ny famolavolana fampiharana toy izany dia mahaliana na inona na inona.

Mampahatsiahy izahay: ho an'ny mpamaky rehetra ny "Habr" - fihenam-bidy 10 roubles rehefa misoratra anarana amin'ny taranja Skillbox rehetra mampiasa ny code promotional "Habr".

Skillbox dia manoro hevitra: Mazava ho azy "Mobile developer PRO.

Toy izao ny endriky ny fampiharana miasa:

Manangana kajy fika ao amin'ny Kotlin: ahoana no fiasan'izy io?

Ampidiro ny isan-jato irina amin'ny totalin'ny vola, ny isan'ny mpandray anjara amin'ny fivoriana, ary mahazo ny vokatra - ny habetsaky ny tendrony tokony hialanao.

Manomboka

Ny interface interface manontolo dia toy izao:
Manangana kajy fika ao amin'ny Kotlin: ahoana no fiasan'izy io?

Manangana kajy fika ao amin'ny Kotlin: ahoana no fiasan'izy io?

Hetsika voalohany - misintona ny fototry ny tetikasa. Sokafy amin'ny Android Studio 3.0 na aoriana. Manorina sy manomboka ny tetikasa izahay ary mahita efijery fotsy. Tsara ny zava-drehetra, izay no tokony ho izy.

Manangana kajy fika ao amin'ny Kotlin: ahoana no fiasan'izy io?

Manangana kajy fika ao amin'ny Kotlin: ahoana no fiasan'izy io?

Ny hetsika ataon'ny mpampiasa dia voasoratra ao amin'ny tetikasa araka ny filaharan'ny fotoana mba hampazava ny zava-drehetra. Raha te hijery azy dia sokafy ny View -> Tool Windows -> TODO.

Mandalina ny tetikasa izahay ary misokatra ny color.xml mba hanombanana ny palette loko. strings.xml dia misy angona lahatsoratra (sonia), ary styles.xml dia misy endritsoratra maromaro.

Fampandrosoana fizarana vola

Sokafy ny activity_main.xml ary ampio ny kaody etsy ambany amin'ny 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"/>

Ankehitriny ianao dia afaka manamboatra ny lahatahiry sanda na milalao loko mampiasa fitaovana.io.

Toy izao ny tetikasa:

Manangana kajy fika ao amin'ny Kotlin: ahoana no fiasan'izy io?
Araka ny hitanao, ny fandaniana dia kajy mifototra amin'ny angon-drakitra nampidirin'ny mpampiasa.

Fampandrosoana ny fizarana kaonty

Ampio ny kaody etsy ambany amin'ny LinearLayout aorian'ny fizarana fandaniana (#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>

Manakatona ny LinearLayout izahay aorian'ny lisitry ny TODO, ary avy eo ampio code vaovao, apetraka ao anaty 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"/>

Satria ny asa lehibe amin'ny fampiharana dia ny manisa ny sandan'ny tsirairay ho an'ny mpandray anjara tsirairay amin'ny fivorian'ny trano fisakafoanana, costPerPersonTextView no mitana ny anjara toerana lehibe.

EditText dia mametra ny fidirana amin'ny andalana iray, ity parameter ity dia tsy maintsy apetraka amin'ny NumberDecimal inputType.

Manangana kajy fika ao amin'ny Kotlin: ahoana no fiasan'izy io?
Manomboka ny tetikasa ho an'ny fitsapana izahay ary ampidiro ny mari-pamantarana ho an'ny fahasimbana ankapobeny (kaopy tapaka, vilia, sns.)

Fampandrosoana ny fizarana "Olona sy toro-hevitra".

Raha te-hanampy fifantenana voky, apetaho ao amin'ny fizarana LinearLayout vaovao ny kaody etsy ambany (#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>

Ity fizarana amin'ny kaody ity dia ilaina mba hanombanana tsara ny habetsaky ny tendrony. Ny sandan'ny lahatsoratra default dia 20. Ny ImageButtons dia omena miaraka amin'ny kisary ao anaty lahatahiry misy alalana manoratra.

Adikao tanteraka ilay fizarana ary ampio ireto manaraka ireto (#5):

  • ImageButton id (esoryPeopleButton, addPeopleButton)
  • TextView id(numberOfPeopleStaticText, numberOfPeopleTextView)
  • DefaultText ho an'ny numberOfPeopleTextView (tsy maintsy 4).

Manangana kajy fika ao amin'ny Kotlin: ahoana no fiasan'izy io?

Amin'izao fotoana izao, rehefa manomboka ny fampiharana ianao, dia misy ny fahafahana manampy ny sandan'ny faktiora, ny bokotra "Add/Subtract" dia miasa ihany koa, saingy mbola tsy misy izany.

Manampy Views

Sokafy ny MainActivity.kt ary ampio amin'ny asa 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
 
}

Famaranana ny bokotra

Mba hanampiana ny fanindriana bokotra dia ampiharinay ny View.OnClickListener eo amin'ny sehatry ny kilasy (#7):

kilasy MainActivity: AppCompatActivity(), View.OnClickListener {

Tsy azo atao ny manangona ny tetikasa amin'izao fotoana izao; mila manao dingana vitsivitsy ianao (#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()
        }
    }

Raha resaka bokotra sy switch, Kotlin dia mandamina ny zava-drehetra tena mahafinaritra! Ampio ny kaody etsy ambany amin'ny asa fampiakarana sy fampihenana rehetra
(#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()
        }
    }

Eto ny kaody dia miaro ny fiasa fanampiny miaraka amin'ny sanda ambony indrindra (MAX_TIP & MAX_PEOPLE). Fanampin'izany, ny code dia miaro ny fiasan'ny fihenam-bidy miaraka amin'ny sanda kely indrindra (MIN_TIP & MIN_PEOPLE).

Ankehitriny dia ampifandraisinay amin'ny mpihaino ny bokotra amin'ny asa initViews (#13):

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

Manangana kajy fika ao amin'ny Kotlin: ahoana no fiasan'izy io?

Azonao atao izao ny manampy ny fahavoazana, ny toro-hevitra ary ny isan'ny mpandray anjara amin'ny fivoriana. Eny, izao ny zava-dehibe indrindra ...

Fizarana kajy ny saran-dalana

Ity kaody ity dia manisa ny fandaniana (#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)
 
}

Eny ary, eto dia antsoina hoe asa izay ahafahana mandinika ny isan'ny olona ao amin'ny orinasa ary manao kajy ny toro-hevitra (#15):

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

Andao hanomboka ny fampiharana. Toa sady miasa tsara. Mety ho tsara kokoa anefa izany.

Raha miezaka manaisotra ny sandan'ny volavolan-dalΓ na ianao ary mampitombo ny isan'ny toro-hevitra na namana, dia hianjera ny fampiharana satria tsy mbola misy fanamarinana ny sandan'ny vidin'ny zero. Ankoatra izany, raha manandrana manova ny sandan'ny faktiora ianao dia tsy havaozina ny fiampangana.

Dingana farany

Ampio TextWatcher (#16):

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

Avy eo dia ampidiro ny mpihaino billEditText (#17):

billEditText.addTextChangedListener(ity)

Ankoatra izany dia manampy kaody izahay hanatanterahana ny 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) {}

Manangana kajy fika ao amin'ny Kotlin: ahoana no fiasan'izy io?

Eny, miasa tanteraka izao ny zava-drehetra! Arahabaina, efa nanoratra ny β€œTop Calculator” anao manokana ao amin'ny Kotlin ianao.

Manangana kajy fika ao amin'ny Kotlin: ahoana no fiasan'izy io?

Skillbox dia manoro hevitra:

Source: www.habr.com

Add a comment