این کد لبه بخشی از دوره آموزشی Android Kotlin Fundamentals است. اگر به ترتیب روی کدها کار کنید، بیشترین ارزش را از این دوره خواهید گرفت. همه کد لبه های دوره در صفحه فرود کد لبه های Android Kotlin Fundamentals فهرست شده اند.
مقدمه
تا اینجا شما همه چیز را تنظیم کرده اید و اندروید استودیو کدهای زیادی برای شما ایجاد کرده است. قبل از اینکه همه این کدها را تغییر دهید، مهم است که بدانید چه چیزی ایجاد کردهاید و چگونه میتوانید فایلهای منبع یک برنامه اندروید را پیمایش کنید.
در این کد لبه، با اجزای اصلی یک برنامه اندروید بیشتر آشنا می شوید و با یک دکمه تعامل ساده ای را به برنامه اضافه می کنید.
آنچه از قبل باید بدانید
- نحوه نصب و باز کردن اندروید استودیو
- نحوه ایجاد یک پروژه اپلیکیشن جدید
- نحوه اجرای یک برنامه در شبیه ساز یا یک دستگاه فیزیکی
چیزی که یاد خواهید گرفت
- نحوه ویرایش فایل طرح بندی برنامه
- نحوه ایجاد یک برنامه با رفتار تعاملی
- بسیاری از اصطلاحات جدید. برای توضیحات دوستانه اصطلاحات و مفاهیم ، واژه نامه واژگان را بررسی کنید.
کاری که خواهی کرد
- فایل
MainActivity
Kotlin و فایل طرح بندی فعالیت را کاوش کنید. - طرحبندی فعالیت را در XML ویرایش کنید.
- یک عنصر
Button
به طرحبندی فعالیت اضافه کنید. - رشته های کدگذاری شده را در فایلی از منابع رشته استخراج کنید.
- روشهای کنترلکننده کلیک را برای نمایش پیامها روی صفحه زمانی که کاربر روی
Button
ضربه میزند، اجرا کنید.
در این کد لبه، شما یک پروژه اپلیکیشن جدید به نام DiceRoller ایجاد میکنید و تعامل اولیه را با یک دکمه اضافه میکنید. با هر بار کلیک بر روی دکمه، مقدار متن نمایش داده شده تغییر می کند. آخرین برنامه DiceRoller برای این کد لبه به شکل زیر است:
در آخرین کد لبه، با بخش های اصلی یک پروژه اپلیکیشن، از جمله دایرکتوری های java
و res
آشنا شدید. در این کار، شما بر روی دو فایل مهم که برنامه شما را تشکیل می دهند تمرکز می کنید: فایل MainActivity
Kotlin و فایل layout activity_main.xml
.
مرحله 1: MainActivity را بررسی کنید
MainActivity
نمونه ای از یک Activity
است. Activity
یک کلاس اصلی اندروید است که یک رابط کاربری برنامه اندروید (UI) ترسیم میکند و رویدادهای ورودی را دریافت میکند. هنگامی که برنامه شما راه اندازی می شود، فعالیت مشخص شده در فایل AndroidManifest.xml
را راه اندازی می کند.
بسیاری از زبان های برنامه نویسی یک روش اصلی را تعریف می کنند که برنامه را شروع می کند. برنامه های اندروید روش اصلی ندارند. در عوض، فایل AndroidManifest.xml
نشان میدهد که وقتی کاربر روی نماد راهانداز برنامه ضربه میزند، MainActivity
باید راهاندازی شود. برای راه اندازی یک فعالیت، سیستم عامل Android از اطلاعات موجود در مانیفست برای تنظیم محیط برنامه و ساخت MainActivity
استفاده می کند. سپس MainActivity
به نوبه خود مقداری تنظیمات را انجام می دهد.
هر فعالیت دارای یک فایل طرح بندی مرتبط است. فعالیت و طرحبندی توسط فرآیندی به نام تورم طرحبندی به هم متصل میشوند. هنگامی که فعالیت شروع می شود، نماهایی که در فایل های طرح بندی XML تعریف شده اند، به اشیاء نمای Kotlin در حافظه تبدیل می شوند (یا "باد" می شوند. هنگامی که این اتفاق می افتد، فعالیت می تواند این اشیاء را به صفحه بکشد و همچنین به صورت پویا آنها را تغییر دهد.
- در Android Studio، File > New > New Project را انتخاب کنید تا یک پروژه جدید ایجاد کنید. از فعالیت Empty استفاده کنید و روی Next کلیک کنید.
- پروژه DiceRoller را فراخوانی کنید و تمام مقادیر دیگر را برای نام پروژه مکان پروژه تأیید کنید. مطمئن شوید که "Use AndroidX Artifacts" علامت زده شده باشد. روی Finish کلیک کنید.
- در بخش Project > Android ، java > com.example.android.diceroller را گسترش دهید. روی MainActivity دوبار کلیک کنید. ویرایشگر کد کد را در
MainActivity
نشان می دهد. - در زیر نام بسته و دستورات import، اعلان کلاس برای
MainActivity
وجود دارد. کلاسMainActivity
AppCompatActivity
را گسترش می دهد.
class MainActivity : AppCompatActivity() { ...
- به متد
onCreate()
توجه کنید. فعالیت ها از سازنده برای مقداردهی اولیه شی استفاده نمی کنند. در عوض، یک سری از روشهای از پیش تعریفشده (به نام «روشهای چرخه عمر») به عنوان بخشی از تنظیم فعالیت فراخوانی میشوند. یکی از این روشهای چرخه حیات،onCreate()
است که همیشه در برنامه خود آن را لغو میکنید. در مورد روشهای چرخه حیات در کدهای بعدی بیشتر میآموزید.
درonCreate()
مشخص میکنید که کدام طرح با اکتیویتی مرتبط است و طرحبندی را افزایش میدهید. متدsetContentView()
هر دو کار را انجام می دهد.
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
}
متد setContentView()
با استفاده از R.layout.activity_main
به طرح ارجاع می دهد که در واقع یک مرجع عدد صحیح است. کلاس R
زمانی ایجاد می شود که برنامه خود را می سازید. کلاس R
شامل تمام دارایی های برنامه، از جمله محتویات دایرکتوری res
است.
در این مورد، R.layout.activity_main
به کلاس R
تولید شده، پوشه layout
و فایل layout activity_main.xml
اشاره دارد. (منابع شامل پسوند فایل نمیشوند.) شما به بسیاری از منابع برنامه (از جمله تصاویر، رشتهها و عناصر داخل فایل طرحبندی) با استفاده از مراجع مشابه در کلاس R
مراجعه خواهید کرد.
مرحله 2: فایل طرح بندی برنامه را بررسی و کاوش کنید
همه فعالیتهای برنامه شما دارای یک فایل طرحبندی مرتبط در دایرکتوری res/layout
برنامه هستند. فایل layout یک فایل XML است که بیان می کند که یک فعالیت در واقع چگونه به نظر می رسد. یک فایل layout این کار را با تعریف نماها و تعیین محل نمایش نماها روی صفحه انجام می دهد.
View ها چیزهایی مانند متن، تصاویر و دکمه هایی هستند که کلاس View
را گسترش می دهند. انواع مختلفی از نماها وجود دارد، از جمله TextView
، Button
، ImageView
و CheckBox
.
در این کار فایل طرح بندی اپلیکیشن را بررسی و اصلاح می کنید.
- در پنجره Project > Android ، res > layout را گسترش دهید و روی activity_main.xml دوبار کلیک کنید. ویرایشگر طراحی layout باز می شود. Android Studio شامل این ویرایشگر است که به شما امکان می دهد طرح بندی برنامه خود را به صورت بصری بسازید و طرح طرح بندی را پیش نمایش کنید. اطلاعات بیشتری در مورد ویرایشگر طراحی در یک کد لبه بعدی خواهید آموخت.
- برای مشاهده فایل طرح بندی به صورت XML، روی تب Text در پایین پنجره کلیک کنید.
- تمام کدهای XML موجود در ویرایشگر طرح بندی را حذف کنید. اگر با ویرایشگر طراحی Android Studio کار می کنید، طرح پیش فرضی که با یک پروژه جدید دریافت می کنید، نقطه شروع خوبی است. برای این درس شما با XML زیربنایی کار خواهید کرد تا یک طرح بندی جدید از ابتدا بسازید.
- این کد را کپی کرده و در طرح بندی قرار دهید:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
tools:context=".MainActivity" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!" />
</LinearLayout>
حالا کد را بررسی کنید:
- عنصر سطح بالا یا ریشه طرح یک عنصر
<LinearLayout>
است. نمایLinearLayout
یکViewGroup
است. گروههای مشاهده محفظههایی هستند که نماهای دیگر را نگه میدارند و به تعیین موقعیت نماها روی صفحه کمک میکنند.
همه نماها و گروههای مشاهدهای که به طرحبندی خود اضافه میکنید در یک سلسلهمراتب view سازماندهی شدهاند و بالاترین عنصر XML به عنوان ریشه آن سلسله مراتب است. نمای ریشه میتواند شامل نماها و گروههای مشاهده دیگری باشد، و گروههای نمای حاوی میتوانند شامل نماها و گروههای مشاهده دیگری باشند. وقتی برنامه شما اجرا میشود، سلسلهمراتب نمایش در فایل طرحبندی XML شما به سلسله مراتبی از اشیاء تبدیل میشود، وقتی طرحبندی متورم میشود. در این مورد، گروه نمای ریشه یک طرح بندی خطی است که نماهای فرزند خود را به صورت خطی، یکی پس از دیگری (به صورت عمودی یا افقی) سازماندهی می کند.
روت پیش فرضی که برای یک پروژه اندروید جدید دریافت می کنید یکConstraintLayout
است که در هماهنگی با ویرایشگر طراحی به خوبی کار می کند. برای این برنامه، از یک گروه نمایLinearLayout
استفاده می کنید که ساده تر از طرح بندی محدودیت است. در درس بعدی چیزهای بیشتری در مورد گروههای مشاهده و چیدمان محدودیتها یاد خواهید گرفت. - در داخل تگ
LinearLayout
به ویژگیandroid:layout_width
توجه کنید. عرض اینLinearLayout
match parent
تنظیم شده است که باعث می شود عرض آن با والد خود برابر باشد. از آنجایی که این نمای ریشه است، طرحبندی تا تمام عرض صفحه گسترش مییابد. - به ویژگی
android:layout_height
توجه کنید که رویwrap_content
تنظیم شده است. این ویژگی باعث میشود که ارتفاعLinearLayout
با ارتفاع ترکیبی همه نماهایی که در آن وجود دارد مطابقت داشته باشد، که در حال حاضر فقطTextView
است. - عنصر
<TextView>
را بررسی کنید. اینTextView
، که متن را نمایش می دهد، تنها عنصر بصری در برنامه DiceRoller شما است. ویژگیandroid:text
رشته واقعی را برای نمایش نگه می دارد، در این مورد رشته"Hello World!"
- به ویژگیهای
android:layout_width
وandroid:layout_height
در عنصر<TextView>
توجه کنید که هر دو رویwrap_content
تنظیم شدهاند. محتوای نمای متن خود متن است، بنابراین نما فقط فضای مورد نیاز متن را اشغال می کند.
برنامه تاس انداختن بدون راهی که کاربر بتواند تاس بیندازد و ببیند چه چیزی ریخته است، چندان مفید نیست. برای شروع، یک دکمه به طرح بندی اضافه کنید تا تاس ریخته شود، و متنی اضافه کنید که مقدار تاسی را که کاربر انداخته را نشان دهد.
مرحله 1: یک دکمه به طرح اضافه کنید
- با وارد کردن <Button و سپس فشار دادن Return، یک عنصر
Button
را به طرح بندی زیر نمای متن اضافه کنید. یک بلوکButton
ظاهر می شود که با/>
پایان می یابد و شامل ویژگی هایlayout_width
وlayout_height
است.
<Button
android:layout_width=""
android:layout_height="" />
- هر دو ویژگی
layout_width
وlayout_height
را روی"wrap_content"
تنظیم کنید. با این مقادیر، دکمه همان عرض و ارتفاع برچسب متنی است که در آن وجود دارد. - یک ویژگی
android:text
به دکمه اضافه کنید و به آن مقدار «Roll» بدهید. عنصر Button اکنون به شکل زیر است:
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Roll" />
برای نماهای Button
، ویژگی text
، برچسب دکمه است. در ویرایشگر layout، مشخصه با رنگ زرد مشخص شده است که نشان دهنده یک نکته یا یک هشدار است. در این مورد، برجسته شدن زرد به این دلیل است که رشته "Roll"
در برچسب دکمه هاردکد شده است، اما رشته باید یک منبع باشد. در بخش بعدی با منابع رشته آشنا می شوید.
مرحله 2: استخراج منابع رشته
به جای رشتههای کدگذاری سخت در طرحبندی یا فایلهای کد، بهترین روش این است که تمام رشتههای برنامه خود را در یک فایل جداگانه قرار دهید. این فایل strings.xml
نام دارد و در میان منابع برنامه، در دایرکتوری res/values/
قرار دارد.
وجود رشته ها در یک فایل جداگانه مدیریت آنها را آسان تر می کند، به خصوص اگر از این رشته ها بیش از یک بار استفاده کنید. همچنین، منابع رشته ای برای ترجمه و بومی سازی برنامه شما اجباری هستند، زیرا باید برای هر زبان یک فایل منبع رشته ایجاد کنید.
Android Studio به شما کمک می کند تا به یاد داشته باشید که رشته های خود را با نکات و هشدارها در یک فایل منبع قرار دهید.
- یک بار روی رشته "Roll" در ویژگی
android:text
تگ<Button>
کلیک کنید. -
Alt+Enter
(Option+Enter
در macOS) را فشار دهید و Extract string resource را از منوی بازشو انتخاب کنید. -
roll_label
برای نام منبع وارد کنید. - روی OK کلیک کنید. یک منبع رشته ای در فایل
res/values/string.xml
ایجاد می شود و رشته در عنصر Button با ارجاع به آن منبع جایگزین می شود:
android:text="@string/roll_label"
- در پنجره Project > Android ، res > values را گسترش دهید و سپس روی strings.xml دوبار کلیک کنید تا منابع رشته خود را در فایل
strings.xml
ببینید:
<resources>
<string name="app_name">DiceRoller</string>
<string name="roll_label">Roll</string>
</resources>
مرحله 3: نمای سبک و موقعیت
طرح شما اکنون شامل یک TextView
و یک نمای Button
است. در این کار، نماها را در گروه view مرتب می کنید تا جذاب تر به نظر برسند.
- برای مشاهده پیش نمایش طرح، روی تب Design کلیک کنید. در حال حاضر هر دو نما در کنار یکدیگر قرار دارند و به بالای صفحه نمایش داده می شوند.
- برای بازگشت به ویرایشگر XML، روی تب Text کلیک کنید. ویژگی
android:orientation
را به تگLinearLayout
اضافه کنید و به آن مقدار"vertical"
بدهید. عنصر<LinearLayout>
اکنون باید به شکل زیر باشد:
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
tools:context=".MainActivity">
گروه نمای LinearLayout
نماهایی را که در خود دارد یکی پس از دیگری در یک خط، به صورت افقی در یک ردیف یا به صورت عمودی در یک پشته قرار می دهد. افقی پیش فرض است. از آنجایی که می خواهید TextView
در بالای Button
انباشته شود، جهت را روی عمودی تنظیم می کنید. اکنون طرح چیزی شبیه به این است، با دکمه زیر متن:
- ویژگی
android:layout_gravity
را بهTextView
وButton
اضافه کنید و مقدار"center_horizontal"
را به آن بدهید. این هر دو نما را در امتداد مرکز محور افقی تراز می کند. اکنون عناصر TextView و Button باید به شکل زیر باشند:
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:text="Hello World!" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:text="@string/roll_label" />
- ویژگی
android:layout_gravity
را به طرح خطی اضافه کنید و مقدار"center_vertical"
را به آن بدهید. عنصرLinearLayout
شما اکنون باید به شکل زیر باشد:
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_gravity="center_vertical"
tools:context=".MainActivity">
- برای افزایش اندازه متن در نمای متن، ویژگی
android:textSize
را با مقدار"30sp"
به عنصر<TextView>
اضافه کنید. مخفف sp مخفف پیکسل های مقیاس پذیر است که معیاری برای اندازه گیری متن مستقل از کیفیت نمایش دستگاه است. عنصر TextView اکنون باید به شکل زیر باشد:
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:textSize="30sp"
android:text="Hello World!" />
- برنامه خود را کامپایل و اجرا کنید.
حالا هم متن و هم دکمه به خوبی قرار گرفته اند و متن بزرگتری در نمای متن وجود دارد. این دکمه هنوز هیچ عملکردی ندارد، بنابراین وقتی روی آن کلیک می کنید هیچ اتفاقی نمی افتد. بعد روی آن کار کنید.
مرحله 4: یک مرجع به دکمه در کد دریافت کنید
کد Kotlin در MainActivity
مسئول تعریف بخش های تعاملی برنامه شما است، مانند آنچه که با ضربه زدن روی یک دکمه اتفاق می افتد. برای نوشتن تابعی که با کلیک روی دکمه اجرا شود، باید به شی Button در طرح بندی بادشده خود در MainActivity ارجاع دهید. برای دریافت ارجاع به دکمه:
-
Button
یک ID در فایل XML اختصاص دهید. - از متد
findViewById()
در کد خود استفاده کنید تا یک ارجاع بهView
با یک شناسه خاص دریافت کنید.
هنگامی که به نمای Button
اشاره کردید، می توانید متدهایی را در آن نما فراخوانی کنید تا با اجرای برنامه به صورت پویا آن را تغییر دهید. به عنوان مثال، می توانید یک کنترل کننده کلیک اضافه کنید که با ضربه زدن روی دکمه، کد را اجرا می کند.
- اگر فایل طرح بندی
activity_main.xml
از قبل باز نشده است را باز کنید و روی تب Text کلیک کنید. - ویژگی
android:id
را به دکمه اضافه کنید و نامی برای آن بگذارید (در این مورد، "@+id/roll_button"
). عنصر<Button>
شما اکنون به شکل زیر است:
<Button
android:id="@+id/roll_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:text="@string/roll_label" />
هنگامی که یک شناسه برای یک View در فایل طرح بندی XML ایجاد می کنید، Android Studio یک عدد ثابت با نام آن شناسه در کلاس R
تولید شده ایجاد می کند. بنابراین اگر یک view roll_button
نامگذاری کنید، Android Studio یک عدد صحیح به نام roll_button
در کلاس R
تولید و ایجاد می کند. پیشوند "@+id"
برای نام ID به کامپایلر می گوید که ثابت ID را به کلاس R اضافه کند. همه شناسههای view در فایل XML شما باید این پیشوند را داشته باشند.
- فایل
MainActivity
Kotlin را باز کنید. داخلonCreate()
، بعد ازsetContentView()
این خط را اضافه کنید:
val rollButton: Button = findViewById(R.id.roll_button)
از متد findViewById()
برای دریافت مرجع View
برای نمای تعریف شده در کلاس XML استفاده کنید. در این حالت، شما مرجع Button
را از کلاس R
و ID roll_button
دریافت میکنید و آن مرجع را به متغیر rollButton
اختصاص میدهید.
- توجه داشته باشید که Android Studio کلاس
Button
را با رنگ قرمز برجسته می کند و زیر آن خط می کشد تا نشان دهد که یک مرجع حل نشده است و قبل از اینکه بتوانید از آن استفاده کنید باید این کلاس را وارد کنید. یک راهنمای ابزار که نام کلاس کاملاً واجد شرایط را نشان می دهد نیز ممکن است ظاهر شود: -
Alt+Enter
(Option+Enter
در مک) را فشار دهید تا نام کلاس کاملاً واجد شرایط را بپذیرید.
مرحله 5: یک کنترل کننده کلیک برای نمایش نان تست اضافه کنید
کنترل کننده کلیک روشی است که هر بار که کاربر روی یک عنصر رابط کاربری قابل کلیک مانند یک دکمه کلیک یا ضربه میزند، فراخوانی میشود. برای ایجاد یک کنترل کننده کلیک شما نیاز دارید:
- روشی که برخی عملیات را انجام می دهد.
- متد
setOnClickHandler()
کهButton
به متد handler متصل می کند.
در این کار، یک روش کلیک-کنترل کننده برای نمایش Toast
ایجاد می کنید. (یک نان تست پیامی است که برای مدت کوتاهی روی صفحه ظاهر می شود.) شما روش کنترل کننده کلیک را به Button
وصل می کنید.
- در کلاس
MainActivity
بعد ازonCreate()
یک تابع خصوصی به نامrollDice()
ایجاد کنید.
private fun rollDice() {
}
- این خط را به متد
rollDice()
اضافه کنید تا زمانی کهrollDice()
فراخوانی می شود یکToast
نمایش داده شود:
Toast.makeText(this, "button clicked",
Toast.LENGTH_SHORT).show()
برای ایجاد یک نان تست، متد Toast.makeText()
را فراخوانی کنید. این روش به سه چیز نیاز دارد:
- یک شی
Context
. شیContext
به شما امکان می دهد با وضعیت فعلی سیستم عامل اندروید ارتباط برقرار کرده و اطلاعاتی در مورد آن دریافت کنید. در اینجا به یکContext
نیاز دارید تا شیToast
بتواند به سیستم عامل بگوید که نان تست را نمایش دهد. از آنجایی کهAppCompatActivity
یک زیر کلاس ازContext
است، فقط می توانید از کلمه کلیدیthis
برای متن استفاده کنید. - پیامی که قرار است نشان داده شود، در اینجا
"button clicked"
. - مدت زمان نمایش پیام متد
show()
در پایان نان تست را نمایش می دهد.
- در
onCreate()
، پس از فراخوانیfindViewById()
این خط را اضافه کنید تاrollDice()
به عنوان کنترل کننده کلیک به شیrollButton
اختصاص دهید:
rollButton.setOnClickListener { rollDice() }
تعریف کامل کلاس MainActivity
شما اکنون به صورت زیر است:
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val rollButton: Button = findViewById(R.id.roll_button)
rollButton.setOnClickListener { rollDice() }
}
private fun rollDice() {
Toast.makeText(this, "button clicked",
Toast.LENGTH_SHORT).show()
}
}
- برنامه خود را کامپایل و اجرا کنید. هر بار که روی دکمه ضربه می زنید، یک نان تست ظاهر می شود.
در این کار، متد rollDice()
را برای تغییر متن در TextView
تغییر میدهید. برای اولین قدم، آن متن را از "Hello World!"
به رشته "Dice Rolled!"
. برای مرحله دوم، یک عدد تصادفی بین یک تا شش نمایش می دهید.
مرحله 1: نمایش یک رشته
-
activity_main.xml
را باز کنید و یک شناسه بهTextView
اضافه کنید.
android:id="@+id/result_text"
-
MainActivity
باز کنید. در متدrollDice()
، خط را برای نمایشToast
بیان کنید. - از متد
findViewById()
برای دریافت ارجاع بهTextView
با شناسه آن استفاده کنید. مرجع را به یک متغیرresultText
اختصاص دهید.
val resultText: TextView = findViewById(R.id.result_text)
- یک رشته جدید به ویژگی
resultText.text
اختصاص دهید تا متن نمایش داده شده را تغییر دهید. شما می توانید راهنمایی برای استخراج آن رشته در یک منبع را نادیده بگیرید. این فقط یک رشته موقت است.
resultText.text = "Dice Rolled!"
- برنامه را کامپایل و اجرا کنید. توجه داشته باشید که با زدن دکمه Roll اکنون
TextView
به روز می شود.
مرحله 2: نمایش یک عدد تصادفی
در نهایت، در این کار شما تصادفی را به کلیک دکمه اضافه میکنید تا پرتاب تاس را شبیهسازی کنید. هر بار که روی دکمه کلیک یا ضربه بزنید کد شما یک عدد تصادفی از 1 تا 6 انتخاب می کند و TextView
به روز می کند. وظیفه تولید یک عدد تصادفی مختص اندروید نیست و برای انجام آن از کلاس Random
استفاده می کنید.
- در بالای متد
rollDice()
، از متدRandom.nextInt()
برای بدست آوردن یک عدد تصادفی بین 1 و 6 استفاده کنید:
val randomInt = Random().nextInt(6) + 1
- ویژگی
text
را به عنوان یک رشته به مقدار عدد صحیح تصادفی تنظیم کنید:
resultText.text = randomInt.toString()
- برنامه را کامپایل و اجرا کنید. هر بار که روی دکمه Roll ضربه می زنید، عدد در نمای متن تغییر می کند.
پروژه اندروید استودیو: DiceRoller
چالش: دکمه دوم را به برنامه اضافه کنید با عنوان "Count Up" که درست زیر دکمه Roll ظاهر می شود. با ضربه زدن روی دکمه Count Up باید مقدار فعلی نمای متن نتیجه را دریافت کند، 1 را به آن اضافه کند و نمای متن را به روز کند. مطمئن شوید که این موارد لبه را کنترل می کنید:
- اگر نمای متن نتیجه هنوز حاوی عددی نیست (یعنی اگر نمای متنی همچنان رشته پیشفرض «Hello World» را دارد)، متن نتیجه را روی ۱ تنظیم کنید.
- اگر عدد از قبل 6 است، کاری نکنید.
کد راه حل چالش کد نویسی
پروژه Android Studio: DiceRoller-challenge
فعالیت ها
-
MainActivity
یک زیر کلاس ازAppCompatActivity
است که به نوبه خود زیر کلاسActivity
است.Activity
یک کلاس اصلی اندروید است که وظیفه ترسیم رابط کاربری برنامه اندروید و دریافت رویدادهای ورودی را بر عهده دارد. - همه فعالیت ها دارای یک فایل طرح بندی مرتبط هستند که یک فایل XML در منابع برنامه است. فایل layout برای فعالیت نامگذاری شده است، برای مثال
activity_main.xml
. - متد
setContentView()
درMainActivity
طرحبندی را با اکتیویتی مرتبط میکند و زمانی که اکتیویتی ایجاد میشود، طرحبندی را افزایش میدهد. - Layout inflation فرآیندی است که در آن نماهای تعریف شده در فایلهای طرحبندی XML به اشیاء نمای Kotlin در حافظه تبدیل میشوند (یا "باد" میشوند. هنگامی که طرح تورم اتفاق می افتد،
Activity
می تواند این اشیاء را به صفحه بکشد و به صورت پویا آنها را تغییر دهد.
بازدیدها
- همه عناصر رابط کاربری در طرحبندی برنامه، زیرکلاسهای کلاس
View
هستند و view نامیده میشوند.TextView
وButton
نمونه هایی از نماها هستند. - عناصر
View
را می توان در یکViewGroup
گروه بندی کرد. یک گروه نمایش به عنوان یک محفظه برای نماها یا سایر گروههای نمایش درون آن عمل میکند.LinearLayout
نمونه ای از گروه view است که نماهای خود را به صورت خطی مرتب می کند.
مشاهده ویژگی ها
- ویژگیهای
android:layout_width
وandroid:layout_height
وزن و ارتفاع یک نما را نشان میدهند. مقدارmatch_parent
نما را به عرض یا ارتفاع والد خود گسترش می دهد. مقدارwrap_content
نما را کوچک می کند تا با محتویات نما مطابقت داشته باشد. - ویژگی
android:text
متنی را نشان میدهد که یک نما باید نمایش دهد (اگر آن نما متن را نشان میدهد.) برای دکمهها،android:text
برچسب دکمه است. - ویژگی
android:orientation
در یک گروه نمایLinearLayout
عناصر view را که در آن قرار دارد مرتب می کند. مقدارhorizontal
نماها را از چپ به راست مرتب می کند. مقدارvertical
نماها را از بالا به پایین مرتب می کند. - ویژگی
android:layout_gravity
محل قرارگیری یک نما و همه فرزندان آن view را تعیین می کند. - ویژگی
android:textSize
اندازه متن را در نمای متنی مشخص می کند. اندازه متن بر حسب واحد sp ( پیکسل های مقیاس پذیر ) مشخص می شود. با استفاده از واحدهای sp، می توانید متن را مستقل از کیفیت نمایش دستگاه اندازه بگیرید.
رشته ها
- به جای رشته های کدگذاری سخت در طرح بندی، بهترین روش استفاده از منابع رشته است.
- منابع رشته ای در فایل
values/res/string.xml
موجود است. - برای استخراج رشته ها، از
Alt+Enter
(Option+Enter
در مک) استفاده کنید. از منوی بازشو گزینه Extract string resources را انتخاب کنید.
استفاده از نماها
- برای اتصال کد کاتلین خود به نمایی که در چیدمان تعریف کرده اید، باید پس از باد شدن نما، یک مرجع به شی view دریافت کنید. یک شناسه (
android:id
) به view در طرح بندی اختصاص دهید، سپس از متدfindViewById()
برای دریافت شی view مرتبط استفاده کنید. - هنگامی که یک شناسه برای یک View در فایل طرح بندی XML ایجاد می کنید، Android Studio یک عدد ثابت با نام آن شناسه در کلاس
R
تولید شده ایجاد می کند. سپس می توانید از آن مرجعR.id
در متدfindViewById()
استفاده کنید. - شما می توانید ویژگی های یک شی view را در کد Kotlin خود مستقیماً با نام ویژگی تنظیم کنید. به عنوان مثال، متن در نمای متنی با ویژگی
android:text
در XML تعریف می شود و با ویژگیtext
در Kotlin تعریف می شود. - کنترل کننده کلیک روشی است که وقتی کاربر روی یک عنصر UI کلیک یا ضربه می زند، فراخوانی می شود. برای ضمیمه کردن یک متد کلیک کنترلر به یک نما مانند یک دکمه، از متد
setOnClickListener()
استفاده کنید.
استفاده از نان تست
نان تست نمایی است که یک پیام ساده را در یک پنجره کوچک بازشو به کاربر نشان می دهد.
برای ایجاد یک نان تست، متد makeText()
را در کلاس Toast
با سه آرگومان فراخوانی کنید:
- زمینه
Activity
برنامه - پیامی که باید نمایش داده شود، برای مثال یک منبع رشته
- یک مدت، برای مثال
Toast.LENGTH_SHORT
برای نمایش نان تست، show()
را فراخوانی کنید.
دوره بی ادبی:
مستندات توسعه دهنده اندروید:
- اندروید استودیو را بشناسید
- طرح بندی ها
-
View
-
Button
-
TextView
- مروری بر منابع برنامه
- نمای کلی رویدادهای ورودی
-
findViewById()
-
setOnClickListener()
-
Context
دیگر:
این بخش، تکالیف احتمالی را برای دانشآموزانی که در این آزمایشگاه کد به عنوان بخشی از دورهای که توسط یک مربی هدایت میشود، کار میکنند، فهرست میکند. این وظیفه مربی است که موارد زیر را انجام دهد:
- در صورت نیاز تکالیف را تعیین کنید.
- نحوه ارسال تکالیف را با دانش آموزان در میان بگذارید.
- تکالیف را نمره دهید.
مربیان میتوانند از این پیشنهادات به اندازهای که میخواهند استفاده کنند، و باید با خیال راحت هر تکلیف دیگری را که فکر میکنند مناسب است، محول کنند.
اگر به تنهایی از طریق این کدها کار می کنید، از این تکالیف برای آزمایش دانش خود استفاده کنید.
یک برنامه را تغییر دهید
برنامه DiceRoller را باز کنید. یک دکمه به برنامه با عنوان "Reset" اضافه کنید که درست در زیر دکمه Roll ظاهر می شود. از آن دکمه بخواهید نمای متن نتیجه را به 0 بازنشانی کند.
به این سوالات پاسخ دهید
سوال 1
کدام روش در یک Activity
، طرحبندی برنامه را افزایش میدهد و نماهای آن را بهعنوان شی در دسترس قرار میدهد؟
-
onCreate()
-
setClickListener()
-
setContentView()
-
show()
سوال 2
از کدام ویژگی view برای تنظیم عرض یک نما استفاده می کنید تا متناسب با محتوا تنظیم شود؟
-
android:view_width="wrap"
-
android:layout_width="wrap_content"
-
android:layout_height="wrap_content"
-
android:layout_width="match_parent"
برنامه خود را برای درجه بندی ارسال کنید
بررسی کنید تا مطمئن شوید برنامه موارد زیر را دارد:
- طرح بندی برنامه باید شامل یک نمای متنی و دو دکمه باشد.
- کد برنامه باید دو کنترل کننده کلیک را تنظیم کند، یکی برای هر دکمه.
- کنترل کننده کلیک که نمای متن را بازنشانی می کند باید ویژگی متن را روی 0 تنظیم کند.
درس بعدی را شروع کنید:
برای پیوند به سایر کدهای این دوره، به صفحه فرود کد لبههای کد پایه Android Kotlin Fundamentals مراجعه کنید.