ساختن یک ماشین حساب نوک در کاتلین: چگونه کار می کند؟
ما به شما نشان می دهیم که چگونه یک برنامه محاسبه نوک ساده در Kotlin ایجاد کنید. به طور دقیق تر، Kotlin 1.3.21، Android 4، Android Studio 3. مقاله قبل از هر چیز برای کسانی که سفر خود را در توسعه برنامه های اندروید شروع می کنند جالب خواهد بود. این به شما امکان می دهد بفهمید که چه چیزی و چگونه در داخل برنامه کار می کند.
چنین ماشین حسابی زمانی مفید است که شما نیاز به محاسبه مقدار انعام از شرکتی دارید که تصمیم به صرف وقت در یک رستوران یا کافه دارد. البته، نه همه و نه همیشه چای را برای پیشخدمت ها می گذارند، این بیشتر یک سنت غربی است، اما روند توسعه چنین برنامه ای در هر صورت جالب است.
یادآوری می کنیم:برای همه خوانندگان "Habr" - تخفیف 10 روبل هنگام ثبت نام در هر دوره Skillbox با استفاده از کد تبلیغاتی "Habr".
در اینجا برنامه زمانی که در حال اجرا است به نظر می رسد:
شما درصد مورد نظر از مبلغ کل، تعداد شرکت کنندگان در جلسه را وارد می کنید و نتیجه را دریافت می کنید - مقدار نکاتی که باید باقی بماند.
شروع کار
رابط کاربری کامل برنامه به شکل زیر است:
اولین اقدام - دانلود پایه پروژه. آن را در Android Studio 3.0 یا بالاتر باز کنید. پروژه را می سازیم و اجرا می کنیم و یک صفحه سفید می بینیم. همه چیز خوب است، همانطور که باید باشد.
اقدامات کاربر در پروژه به ترتیب زمانی نوشته شده است تا همه چیز مشخص باشد. برای مشاهده آن، View -> Tool Windows -> TODO را باز کنید.
پروژه را مطالعه می کنیم و colors.xml را برای ارزیابی پالت رنگ باز می کنیم. strings.xml حاوی داده های متنی (شرح) و styles.xml شامل چندین قالب فونت است.
توسعه بخش هزینه
activity_main.xml را باز کنید و کد زیر را به LinearLayout (#1) اضافه کنید:
از آنجایی که وظیفه اصلی برنامه محاسبه هزینه های فردی برای هر یک از شرکت کنندگان در تجمعات در رستوران است، costPerPersonTextView نقش اصلی را ایفا می کند.
EditText ورودی را به یک خط محدود می کند، این پارامتر باید روی NumberDecimal inputType تنظیم شود.
پروژه را برای آزمایش شروع می کنیم و پارامترهای کل آسیب را وارد می کنیم (فنجان شکسته، بشقاب و غیره)
توسعه بخش "افراد و نکات".
برای افزودن یک انتخابگر مقدار انعام، کد زیر را در بخش LinearLayout جدید (#4) قرار دهید:
از نظر دکمه ها و سوئیچ ها، کاتلین همه چیز را بسیار عالی سازماندهی کرده است! کد زیر را به تمام توابع افزایش و کاهش اضافه کنید
(#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) {}
خوب، حالا همه چیز کار می کند! تبریک می گویم، شما «ماشین حساب انعام» خود را در کاتلین نوشته اید.