Android Kotlin Fundamentals 01.2: آناتومی اولیه برنامه

این کد لبه بخشی از دوره آموزشی 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 در حافظه تبدیل می شوند (یا "باد" می شوند. هنگامی که این اتفاق می افتد، فعالیت می تواند این اشیاء را به صفحه بکشد و همچنین به صورت پویا آنها را تغییر دهد.

  1. در Android Studio، File > New > New Project را انتخاب کنید تا یک پروژه جدید ایجاد کنید. از فعالیت Empty استفاده کنید و روی Next کلیک کنید.
  2. پروژه DiceRoller را فراخوانی کنید و تمام مقادیر دیگر را برای نام پروژه مکان پروژه تأیید کنید. مطمئن شوید که "Use AndroidX Artifacts" علامت زده شده باشد. روی Finish کلیک کنید.


  3. در بخش Project > Android ، java > com.example.android.diceroller را گسترش دهید. روی MainActivity دوبار کلیک کنید. ویرایشگر کد کد را در MainActivity نشان می دهد.


  4. در زیر نام بسته و دستورات import، اعلان کلاس برای MainActivity وجود دارد. کلاس MainActivity AppCompatActivity را گسترش می دهد.
class MainActivity : AppCompatActivity() { ...
  1. به متد 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 .

در این کار فایل طرح بندی اپلیکیشن را بررسی و اصلاح می کنید.

  1. در پنجره Project > Android ، res > layout را گسترش دهید و روی activity_main.xml دوبار کلیک کنید. ویرایشگر طراحی layout باز می شود. Android Studio شامل این ویرایشگر است که به شما امکان می دهد طرح بندی برنامه خود را به صورت بصری بسازید و طرح طرح بندی را پیش نمایش کنید. اطلاعات بیشتری در مورد ویرایشگر طراحی در یک کد لبه بعدی خواهید آموخت.
  2. برای مشاهده فایل طرح بندی به صورت XML، روی تب Text در پایین پنجره کلیک کنید.


  3. تمام کدهای XML موجود در ویرایشگر طرح بندی را حذف کنید. اگر با ویرایشگر طراحی Android Studio کار می کنید، طرح پیش فرضی که با یک پروژه جدید دریافت می کنید، نقطه شروع خوبی است. برای این درس شما با XML زیربنایی کار خواهید کرد تا یک طرح بندی جدید از ابتدا بسازید.
  4. این کد را کپی کرده و در طرح بندی قرار دهید:
<?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>

حالا کد را بررسی کنید:

  1. عنصر سطح بالا یا ریشه طرح یک عنصر <LinearLayout> است. نمای LinearLayout یک ViewGroup است. گروه‌های مشاهده محفظه‌هایی هستند که نماهای دیگر را نگه می‌دارند و به تعیین موقعیت نماها روی صفحه کمک می‌کنند.

    همه نماها و گروه‌های مشاهده‌ای که به طرح‌بندی خود اضافه می‌کنید در یک سلسله‌مراتب view سازمان‌دهی شده‌اند و بالاترین عنصر XML به عنوان ریشه آن سلسله مراتب است. نمای ریشه می‌تواند شامل نماها و گروه‌های مشاهده دیگری باشد، و گروه‌های نمای حاوی می‌توانند شامل نماها و گروه‌های مشاهده دیگری باشند. وقتی برنامه شما اجرا می‌شود، سلسله‌مراتب نمایش در فایل طرح‌بندی XML شما به سلسله مراتبی از اشیاء تبدیل می‌شود، وقتی طرح‌بندی متورم می‌شود. در این مورد، گروه نمای ریشه یک طرح بندی خطی است که نماهای فرزند خود را به صورت خطی، یکی پس از دیگری (به صورت عمودی یا افقی) سازماندهی می کند.

    روت پیش فرضی که برای یک پروژه اندروید جدید دریافت می کنید یک ConstraintLayout است که در هماهنگی با ویرایشگر طراحی به خوبی کار می کند. برای این برنامه، از یک گروه نمای LinearLayout استفاده می کنید که ساده تر از طرح بندی محدودیت است. در درس بعدی چیزهای بیشتری در مورد گروه‌های مشاهده و چیدمان محدودیت‌ها یاد خواهید گرفت.
  2. در داخل تگ LinearLayout به ویژگی android:layout_width توجه کنید. عرض این LinearLayout match parent تنظیم شده است که باعث می شود عرض آن با والد خود برابر باشد. از آنجایی که این نمای ریشه است، طرح‌بندی تا تمام عرض صفحه گسترش می‌یابد.
  3. به ویژگی android:layout_height توجه کنید که روی wrap_content تنظیم شده است. این ویژگی باعث می‌شود که ارتفاع LinearLayout با ارتفاع ترکیبی همه نماهایی که در آن وجود دارد مطابقت داشته باشد، که در حال حاضر فقط TextView است.
  4. عنصر <TextView> را بررسی کنید. این TextView ، که متن را نمایش می دهد، تنها عنصر بصری در برنامه DiceRoller شما است. ویژگی android:text رشته واقعی را برای نمایش نگه می دارد، در این مورد رشته "Hello World!"
  5. به ویژگی‌های android:layout_width و android:layout_height در عنصر <TextView> توجه کنید که هر دو روی wrap_content تنظیم شده‌اند. محتوای نمای متن خود متن است، بنابراین نما فقط فضای مورد نیاز متن را اشغال می کند.

برنامه تاس انداختن بدون راهی که کاربر بتواند تاس بیندازد و ببیند چه چیزی ریخته است، چندان مفید نیست. برای شروع، یک دکمه به طرح بندی اضافه کنید تا تاس ریخته شود، و متنی اضافه کنید که مقدار تاسی را که کاربر انداخته را نشان دهد.

مرحله 1: یک دکمه به طرح اضافه کنید

  1. با وارد کردن <Button و سپس فشار دادن Return، یک عنصر Button را به طرح بندی زیر نمای متن اضافه کنید. یک بلوک Button ظاهر می شود که با /> پایان می یابد و شامل ویژگی های layout_width و layout_height است.
<Button
   android:layout_width=""
   android:layout_height="" />
  1. هر دو ویژگی layout_width و layout_height را روی "wrap_content" تنظیم کنید. با این مقادیر، دکمه همان عرض و ارتفاع برچسب متنی است که در آن وجود دارد.
  2. یک ویژگی 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 به شما کمک می کند تا به یاد داشته باشید که رشته های خود را با نکات و هشدارها در یک فایل منبع قرار دهید.

  1. یک بار روی رشته "Roll" در ویژگی android:text تگ <Button> کلیک کنید.
  2. Alt+Enter ( Option+Enter در macOS) را فشار دهید و Extract string resource را از منوی بازشو انتخاب کنید.
  3. roll_label برای نام منبع وارد کنید.
  4. روی OK کلیک کنید. یک منبع رشته ای در فایل res/values/string.xml ایجاد می شود و رشته در عنصر Button با ارجاع به آن منبع جایگزین می شود:
    android:text="@string/roll_label"
  5. در پنجره 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 مرتب می کنید تا جذاب تر به نظر برسند.

  1. برای مشاهده پیش نمایش طرح، روی تب Design کلیک کنید. در حال حاضر هر دو نما در کنار یکدیگر قرار دارند و به بالای صفحه نمایش داده می شوند.


  2. برای بازگشت به ویرایشگر 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 انباشته شود، جهت را روی عمودی تنظیم می کنید. اکنون طرح چیزی شبیه به این است، با دکمه زیر متن:

  1. ویژگی 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" />
  1. ویژگی 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">
  1. برای افزایش اندازه متن در نمای متن، ویژگی 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!" />
  1. برنامه خود را کامپایل و اجرا کنید.


حالا هم متن و هم دکمه به خوبی قرار گرفته اند و متن بزرگتری در نمای متن وجود دارد. این دکمه هنوز هیچ عملکردی ندارد، بنابراین وقتی روی آن کلیک می کنید هیچ اتفاقی نمی افتد. بعد روی آن کار کنید.

مرحله 4: یک مرجع به دکمه در کد دریافت کنید

کد Kotlin در MainActivity مسئول تعریف بخش های تعاملی برنامه شما است، مانند آنچه که با ضربه زدن روی یک دکمه اتفاق می افتد. برای نوشتن تابعی که با کلیک روی دکمه اجرا شود، باید به شی Button در طرح بندی بادشده خود در MainActivity ارجاع دهید. برای دریافت ارجاع به دکمه:

  • Button یک ID در فایل XML اختصاص دهید.
  • از متد findViewById() در کد خود استفاده کنید تا یک ارجاع به View با یک شناسه خاص دریافت کنید.

هنگامی که به نمای Button اشاره کردید، می توانید متدهایی را در آن نما فراخوانی کنید تا با اجرای برنامه به صورت پویا آن را تغییر دهید. به عنوان مثال، می توانید یک کنترل کننده کلیک اضافه کنید که با ضربه زدن روی دکمه، کد را اجرا می کند.

  1. اگر فایل طرح بندی activity_main.xml از قبل باز نشده است را باز کنید و روی تب Text کلیک کنید.
  2. ویژگی 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 شما باید این پیشوند را داشته باشند.

  1. فایل MainActivity Kotlin را باز کنید. داخل onCreate() ، بعد از setContentView() این خط را اضافه کنید:
val rollButton: Button = findViewById(R.id.roll_button)

از متد findViewById() برای دریافت مرجع View برای نمای تعریف شده در کلاس XML استفاده کنید. در این حالت، شما مرجع Button را از کلاس R و ID roll_button دریافت می‌کنید و آن مرجع را به متغیر rollButton اختصاص می‌دهید.

  1. توجه داشته باشید که Android Studio کلاس Button را با رنگ قرمز برجسته می کند و زیر آن خط می کشد تا نشان دهد که یک مرجع حل نشده است و قبل از اینکه بتوانید از آن استفاده کنید باید این کلاس را وارد کنید. یک راهنمای ابزار که نام کلاس کاملاً واجد شرایط را نشان می دهد نیز ممکن است ظاهر شود:


  2. Alt+Enter ( Option+Enter در مک) را فشار دهید تا نام کلاس کاملاً واجد شرایط را بپذیرید.

مرحله 5: یک کنترل کننده کلیک برای نمایش نان تست اضافه کنید

کنترل کننده کلیک روشی است که هر بار که کاربر روی یک عنصر رابط کاربری قابل کلیک مانند یک دکمه کلیک یا ضربه می‌زند، فراخوانی می‌شود. برای ایجاد یک کنترل کننده کلیک شما نیاز دارید:

  • روشی که برخی عملیات را انجام می دهد.
  • متد setOnClickHandler() که Button به متد handler متصل می کند.

در این کار، یک روش کلیک-کنترل کننده برای نمایش Toast ایجاد می کنید. (یک نان تست پیامی است که برای مدت کوتاهی روی صفحه ظاهر می شود.) شما روش کنترل کننده کلیک را به Button وصل می کنید.

  1. در کلاس MainActivity بعد از onCreate() یک تابع خصوصی به نام rollDice() ایجاد کنید.
private fun rollDice() {
  
}
  1. این خط را به متد rollDice() اضافه کنید تا زمانی که rollDice() فراخوانی می شود یک Toast نمایش داده شود:
Toast.makeText(this, "button clicked", 
   Toast.LENGTH_SHORT).show()

برای ایجاد یک نان تست، متد Toast.makeText() را فراخوانی کنید. این روش به سه چیز نیاز دارد:

  • یک شی Context . شی Context به شما امکان می دهد با وضعیت فعلی سیستم عامل اندروید ارتباط برقرار کرده و اطلاعاتی در مورد آن دریافت کنید. در اینجا به یک Context نیاز دارید تا شی Toast بتواند به سیستم عامل بگوید که نان تست را نمایش دهد. از آنجایی که AppCompatActivity یک زیر کلاس از Context است، فقط می توانید از کلمه کلیدی this برای متن استفاده کنید.
  • پیامی که قرار است نشان داده شود، در اینجا "button clicked" .
  • مدت زمان نمایش پیام متد show() در پایان نان تست را نمایش می دهد.
  1. در 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()
    }
}
  1. برنامه خود را کامپایل و اجرا کنید. هر بار که روی دکمه ضربه می زنید، یک نان تست ظاهر می شود.

در این کار، متد rollDice() را برای تغییر متن در TextView تغییر می‌دهید. برای اولین قدم، آن متن را از "Hello World!" به رشته "Dice Rolled!" . برای مرحله دوم، یک عدد تصادفی بین یک تا شش نمایش می دهید.

مرحله 1: نمایش یک رشته

  1. activity_main.xml را باز کنید و یک شناسه به TextView اضافه کنید.
android:id="@+id/result_text"
  1. MainActivity باز کنید. در متد rollDice() ، خط را برای نمایش Toast بیان کنید.
  2. از متد findViewById() برای دریافت ارجاع به TextView با شناسه آن استفاده کنید. مرجع را به یک متغیر resultText اختصاص دهید.
val resultText: TextView = findViewById(R.id.result_text)
  1. یک رشته جدید به ویژگی resultText.text اختصاص دهید تا متن نمایش داده شده را تغییر دهید. شما می توانید راهنمایی برای استخراج آن رشته در یک منبع را نادیده بگیرید. این فقط یک رشته موقت است.
resultText.text = "Dice Rolled!"
  1. برنامه را کامپایل و اجرا کنید. توجه داشته باشید که با زدن دکمه Roll اکنون TextView به روز می شود.

مرحله 2: نمایش یک عدد تصادفی

در نهایت، در این کار شما تصادفی را به کلیک دکمه اضافه می‌کنید تا پرتاب تاس را شبیه‌سازی کنید. هر بار که روی دکمه کلیک یا ضربه بزنید کد شما یک عدد تصادفی از 1 تا 6 انتخاب می کند و TextView به روز می کند. وظیفه تولید یک عدد تصادفی مختص اندروید نیست و برای انجام آن از کلاس Random استفاده می کنید.

  1. در بالای متد rollDice() ، از متد Random.nextInt() برای بدست آوردن یک عدد تصادفی بین 1 و 6 استفاده کنید:
val randomInt = Random().nextInt(6) + 1
  1. ویژگی text را به عنوان یک رشته به مقدار عدد صحیح تصادفی تنظیم کنید:
resultText.text = randomInt.toString()
  1. برنامه را کامپایل و اجرا کنید. هر بار که روی دکمه 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() را فراخوانی کنید.

دوره بی ادبی:

مستندات توسعه دهنده اندروید:

دیگر:

این بخش، تکالیف احتمالی را برای دانش‌آموزانی که در این آزمایشگاه کد به عنوان بخشی از دوره‌ای که توسط یک مربی هدایت می‌شود، کار می‌کنند، فهرست می‌کند. این وظیفه مربی است که موارد زیر را انجام دهد:

  • در صورت نیاز تکالیف را تعیین کنید.
  • نحوه ارسال تکالیف را با دانش آموزان در میان بگذارید.
  • تکالیف را نمره دهید.

مربیان می‌توانند از این پیشنهادات به اندازه‌ای که می‌خواهند استفاده کنند، و باید با خیال راحت هر تکلیف دیگری را که فکر می‌کنند مناسب است، محول کنند.

اگر به تنهایی از طریق این کدها کار می کنید، از این تکالیف برای آزمایش دانش خود استفاده کنید.

یک برنامه را تغییر دهید

برنامه 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 تنظیم کند.

درس بعدی را شروع کنید: 1.3 منابع تصویر و سازگاری

برای پیوند به سایر کدهای این دوره، به صفحه فرود کد لبه‌های کد پایه Android Kotlin Fundamentals مراجعه کنید.