هذا الدرس التطبيقي حول الترميز هو جزء من دورة "أساسيات Android Kotlin". يمكنك تحقيق أقصى استفادة من هذه الدورة التدريبية إذا اتبعت ترتيب الخطوات في دروس البرمجة. يتم إدراج جميع الدروس التطبيقية حول الترميز الخاصة بالدورة التدريبية في الصفحة المقصودة للدروس التطبيقية حول الترميز في دورة Android Kotlin Fundamentals.
ما يجب معرفته
- إنشاء تطبيق Android أساسي في Kotlin
- تشغيل تطبيق Android على محاكي أو جهاز
- إنشاء تخطيط خطي باستخدام "أداة تعديل التخطيط" في "استوديو Android"
- إنشاء تطبيق بسيط يستخدم
LinearLayout
وTextView
وScrollView
وزرًا مع معالج نقرات
أهداف الدورة التعليمية
- كيفية الحصول على إدخال المستخدم باستخدام طريقة عرض
EditText
- كيفية ضبط النص على طريقة عرض
TextView
باستخدام النص من طريقة العرضEditText
- كيفية العمل مع
View
وViewGroup
- كيفية تغيير مستوى رؤية
View
الإجراءات التي ستنفذّها
- أضِف تفاعلية إلى تطبيق AboutMe، وهو تطبيق من درس برمجة سابق.
- أضِف
EditText
ليتمكّن المستخدم من إدخال نص. - أضِف
Button
ونفِّذ معالج النقر الخاص به.
في هذا الدرس التطبيقي حول الترميز، ستوسّع تطبيق AboutMe لإضافة تفاعل المستخدم. يمكنك إضافة حقل لقب وزر تم وعرض نص لعرض اللقب. بعد أن يُدخل المستخدم لقبًا وينقر على الزر تم، يتم تعديل عرض النص لإظهار اللقب الذي تم إدخاله. يمكن للمستخدم تعديل اللقب مرة أخرى من خلال النقر على عرض النص.
في هذه المهمة، ستضيف حقل إدخال EditText
للسماح للمستخدم بإدخال اسم مستعار.
الخطوة 1: تنفيذ الخطوات الأولى
- إذا لم يكن لديك تطبيق AboutMe من درس برمجة سابق، نزِّل الرمز الأوّلي AboutMeInteractive-Starter. هذا هو الرمز البرمجي نفسه الذي أكملته في تجربة عملية سابقة.
- افتح مشروع AboutMeInteractive-Starter في "استوديو Android".
- شغِّل التطبيق. سيظهر لك عرض نصي للاسم وصورة نجمة ومقطع طويل من النص في عرض قابل للتمرير.
لاحظ أنّه لا يمكن للمستخدم تغيير أي من النصوص.
تكون التطبيقات أكثر إثارة للاهتمام إذا كان بإمكان المستخدم التفاعل معها، مثلاً إذا كان بإمكانه إدخال نص. لقبول إدخال النص، يوفّر نظام التشغيل Android أداة لواجهة المستخدم تُعرف باسم نص قابل للتعديل. يمكنك تحديد نص قابل للتعديل باستخدام EditText
، وهو فئة فرعية من TextView
. يتيح مربع تعديل النص للمستخدم إدخال وتعديل النص، كما هو موضّح في لقطة الشاشة أدناه.
الخطوة 2: إضافة عنصر EditText
- في "استوديو Android"، افتح ملف التنسيق
activity_main.xml
في علامة التبويب تصميم. - في لوحة لوحة الألوان، انقر على نص.
Ab TextView، وهوTextView
، يظهر في أعلى قائمة عناصر النص في لوحة لوحة الألوان. أسفل Ab TextView، تظهر عدّة طرق عرضEditText
.
في جزء لوحة الألوان، لاحظ كيف يعرض رمزTextView
الحرفين Ab بدون تسطير. ومع ذلك، تعرض رموزEditText
Ab مع خط سفلي. يشير التسطير إلى أنّ العرض قابل للتعديل.
بالنسبة إلى كل عرض من عروضEditText
، يضبط نظام التشغيل Android سمات مختلفة، ويعرض النظام طريقة الإدخال المناسبة للبرامج (مثل لوحة المفاتيح على الشاشة). - اسحب عنصر تحكّم PlainText إلى شجرة المكوّنات وضعه أسفل
name_text
وفوقstar_image
. - استخدِم جزء السمات لضبط السمات التالية في طريقة العرض
EditText
.
السمة | القيمة |
|
|
|
|
|
|
- شغِّل تطبيقك. فوق صورة النجمة، سيظهر لك نص قابل للتعديل يتضمّن النص التلقائي "الاسم".
في هذه المهمة، يمكنك تصميم طريقة العرض EditText
من خلال إضافة تلميح وتغيير محاذاة النص وتغيير النمط إلى NameStyle
وتحديد نوع الإدخال.
الخطوة 1: إضافة نص تلميحي
- أضِف مورد سلسلة جديدًا للتلميح في ملف
string.xml
.
<string name="what_is_your_nickname">What is your Nickname?</string>
- استخدِم جزء السمات لضبط السمات التالية على طريقة العرض
EditText
:
السمة | القيمة |
|
|
|
|
|
|
- في جزء السمات، أزِل القيمة
Name
من السمةtext
. يجب أن تكون قيمة السمةtext
فارغة حتى يتم عرض التلميح.
الخطوة 2: ضبط السمة inputType
تحدّد السمة inputType
نوع الإدخال الذي يمكن للمستخدمين إدخاله في طريقة العرض EditText
. يعرض نظام Android حقل الإدخال ولوحة المفاتيح على الشاشة المناسبَين، وذلك حسب نوع الإدخال الذي تم ضبطه.
للاطّلاع على جميع أنواع الإدخال الممكنة، انقر على الحقل inputType
في لوحة السمات، أو انقر على علامات الحذف الثلاث ... بجانب الحقل. تفتح قائمة تعرض جميع أنواع الإدخال التي يمكنك استخدامها، مع وضع علامة في المربّع بجانب نوع الإدخال النشط حاليًا. يمكنك اختيار أكثر من نوع إدخال واحد.
على سبيل المثال، بالنسبة إلى كلمات المرور، استخدِم القيمة textPassword
. يخفي حقل النص إدخال المستخدم.
بالنسبة إلى أرقام الهواتف، استخدِم القيمة phone
. يتم عرض لوحة مفاتيح رقمية، ولا يمكن للمستخدم إدخال سوى الأرقام.
اضبط نوع الإدخال لحقل اللقب:
- اضبط السمة
inputType
علىtextPersonName
من أجلnickname_edit
النص القابل للتعديل. - في لوحة شجرة المكوّنات، ستلاحظ تحذيرًا
autoFillHints
. لا ينطبق هذا التحذير على هذا التطبيق وهو خارج نطاق هذا الدرس البرمجي، لذا يمكنك تجاهله. (لمزيد من المعلومات حول ميزة "الملء التلقائي"، اطّلِع على مقالة تحسين تطبيقك لاستخدام ميزة "الملء التلقائي"). - في لوحة السمات ، تحقّق من قيم السمات التالية لطريقة العرض
EditText
:
السمة | القيمة |
|
|
|
|
|
|
|
|
|
|
|
|
| (فارغ) |
Button
هو عنصر في واجهة المستخدم يمكن للمستخدم النقر عليه لتنفيذ إجراء. يمكن أن يتألف الزر من نص أو رمز أو كليهما.
في هذه المهمة، ستضيف زر تم، الذي ينقر عليه المستخدم بعد إدخال اسم مستعار. يبدّل الزر طريقة العرض EditText
بطريقة العرض TextView
التي تعرض الاسم. لتعديل الاسم المستعار، يمكن للمستخدم النقر على رمز TextView
.
الخطوة 1: إضافة زر "تم"
- اسحب زرًا من جزء لوحة الألوان إلى شجرة المكوّنات. ضَع الزر أسفل
nickname_edit
نص التعديل.
- أنشئ مورد سلسلة جديدًا باسم
done
. امنح السلسلة القيمةDone
،
<string name="done">Done</string>
- استخدِم جزء السمات لضبط السمات التالية في طريقة العرض
Button
التي تمت إضافتها حديثًا:
السمة | القيم |
|
|
|
|
|
|
|
|
توسّط السمة layout_gravity
العرض في التصميم الرئيسي LinearLayout
.
- غيِّر النمط إلى
Widget.AppCompat.Button.Colored
، وهو أحد الأنماط المحدَّدة مسبقًا التي يوفّرها Android. يمكنك اختيار النمط من القائمة المنسدلة أو من نافذة المراجع.
يغيّر هذا النمط لون الزر إلى لون التمييز،colorAccent
. يتم تحديد لون التمييز في ملفres/values/colors.xml
.
يحتوي ملف colors.xml
على الألوان التلقائية لتطبيقك. ويمكنك إضافة موارد ألوان جديدة أو تغيير موارد الألوان الحالية في مشروعك، استنادًا إلى متطلبات تطبيقك.
نموذج ملف colors.xml
:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="colorPrimary">#008577</color>
<color name="colorPrimaryDark">#00574B</color>
<color name="colorAccent">#D81B60</color>
</resources>
الخطوة 2: تصميم زرّ "تم"
- في لوحة السمات، أضِف هامشًا علويًا من خلال اختيار Layout_Margin > Top. اضبط الهامش العلوي على
layout_margin
، وهو محدّد في الملفdimens.xml
. - اضبط السمة
fontFamily
علىroboto
من القائمة المنسدلة. - انتقِل إلى علامة التبويب نص وتأكَّد من صحة رمز XML الذي تم إنشاؤه للزر الذي تمت إضافته حديثًا.
<Button
android:id="@+id/done_button"
style="@style/Widget.AppCompat.Button.Colored"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="@dimen/layout_margin"
android:fontFamily="@font/roboto"
android:text="@string/done" />
الخطوة 3: تغيير مورد اللون
في هذه الخطوة، ستغيّر لون تمييز الزر ليتطابق مع شريط التطبيق في نشاطك.
- افتح
res/values/colors.xml
وغيِّر قيمةcolorAccent
إلى#76bf5e
.
<color name="colorAccent">#76bf5e</color>
يمكنك الاطّلاع على اللون المتوافق مع الرمز السداسي العشري في الهامش الأيمن لمحرّر الملف.
لاحظ التغيير في لون الزر في "محرّر التصميم".
- شغِّل تطبيقك. من المفترض أن يظهر زر تم منمّق أسفل النص القابل للتعديل.
بعد أن يُدخل المستخدم لقبًا وينقر على الزر تم، يظهر اللقب في طريقة عرض TextView
. في هذه المهمة، ستضيف طريقة عرض نصية بخلفية ملونة. تعرض طريقة عرض النص لقب المستخدم فوق star_image
.
الخطوة 1: إضافة TextView للاسم المستعار
- اسحب عرضًا نصيًا من لوحة الأدوات إلى شجرة المكوّنات. ضَع عرض النص أسفل
done_button
وفوقstar_image
. - استخدِم جزء السمات لضبط السمات التالية لعرض
TextView
الجديد:
السمة | القيمة |
|
|
|
|
|
|
الخطوة 2: تغيير مستوى رؤية TextView
يمكنك إظهار طرق العرض أو إخفاؤها في تطبيقك باستخدام السمة visibility
. تتضمّن هذه السمة إحدى القيم الثلاث التالية:
-
visible
: العرض مرئي. -
Invisible
: يؤدي إلى إخفاء طريقة العرض، ولكنها تظل تشغل مساحة في التصميم. -
gone
: يخفي طريقة العرض، ولا تشغل طريقة العرض أي مساحة في التصميم.
- في لوحة السمات، اضبط قيمة
visibility
لعرض النصnickname_text
علىgone
، لأنّك لا تريد أن يعرض تطبيقك طريقة عرض النص هذه في البداية.
لاحظ أنّه عند تغيير السمة في لوحة السمات، يختفي العرضnickname_text
من "محرّر التصميم". يتم إخفاء طريقة العرض في معاينة التنسيق. - غيِّر قيمة السمة
text
للعرضnickname_text
إلى سلسلة فارغة.
يجب أن يبدو رمز XML الذي تم إنشاؤه لهذا TextView
على النحو التالي:
<TextView
android:id="@+id/nickname_text"
style="@style/NameStyle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textAlignment="center"
android:visibility="gone"
android:text="" />
يجب أن تبدو معاينة التنسيق على النحو التالي:
يحدّد معالج النقرات في العنصر Button
(أو في أي عرض) الإجراء الذي سيتم تنفيذه عند النقر على الزر (العرض). يجب تنفيذ الدالة التي تعالج حدث النقر في Activity
الذي يستضيف التصميم الذي يتضمّن الزر (طريقة العرض).
يتضمّن برنامج معالجة النقرات عادةً هذا التنسيق، حيث يكون العرض الذي تم تمريره هو العرض الذي تلقّى النقرة أو اللمسة.
private fun clickHandlerFunction(viewThatIsClicked: View) {
// Add code to perform the button click event
}
يمكنك ربط وظيفة معالجة النقرات بأحداث النقر على الأزرار بطريقتَين:
- في تنسيق XML، يمكنك إضافة السمة
android:onClick
إلى العنصر<Button>
. على سبيل المثال:
<Button
android:id="@+id/done_button"
android:text="@string/done"
...
android:onClick="clickHandlerFunction"/>
أو
- يمكنك إجراء ذلك آليًا في وقت التشغيل، في
onCreate()
منActivity
، من خلال استدعاءsetOnClickListener
. على سبيل المثال:
myButton.setOnClickListener {
clickHanderFunction(it)
}
في هذه المهمة، ستضيف أداة معالجة نقرات للزر done_button
برمجيًا. يمكنك إضافة معالج النقر في النشاط ذي الصلة، وهو MainActivity.kt
.
ستنفّذ دالة معالج النقرات، التي تحمل الاسم addNickname
، ما يلي:
- احصل على النص من
nickname_edit
تعديل النص. - اضبط النص في عرض النص
nickname_text
. - إخفاء النص القابل للتعديل والزر
- عرض اللقب
TextView
الخطوة 1: إضافة أداة معالجة نقرات
- في Android Studio، افتح الملف
MainActivity.kt
في المجلدjava
. - في
MainActivity.kt
، داخل الفئةMainActivity
، أضِف دالة باسمaddNickname
. أدرِج مَعلمة إدخال باسمview
من النوعView
. المَعلمةview
هيView
التي يتم استدعاء الدالة عليها. في هذه الحالة، سيكونview
مثيلاً لزر تم.
private fun addNickname(view: View) {
}
- داخل الدالة
addNickname
، استخدِمfindViewById()
للحصول على مرجع إلى نص التعديلnickname_edit
وعرض النصnickname_text
.
val editText = findViewById<EditText>(R.id.nickname_edit)
val nicknameTextView = findViewById<TextView>(R.id.nickname_text)
- اضبط النص في عرض النص
nicknameTextView
على النص الذي أدخله المستخدم فيeditText
، مع الحصول عليه من السمةtext
.
nicknameTextView.text = editText.text
- أخفِ طريقة عرض اللقب
EditText
من خلال ضبط السمةvisibility
للعنصرeditText
على القيمةView.GONE
.
في مهمة سابقة، غيّرت السمة visibility
باستخدام "أداة تعديل التصميم". وهنا يمكنك تنفيذ الإجراء نفسه آليًا.
editText.visibility = View.GONE
- أخفِ الزر تم من خلال ضبط السمة
visibility
على القيمةView.GONE
. لديك مرجع الزرّ كمعلَمة إدخال للدالة،view
.
view.visibility = View.GONE
- في نهاية الدالة
addNickname
، اجعل طريقة عرض الاسم المستعارTextView
مرئية من خلال ضبط السمةvisibility
علىView.VISIBLE
.
nicknameTextView.visibility = View.VISIBLE
الخطوة 2: إرفاق أداة معالجة النقرات بزر "تم"
بعد أن أصبحت لديك دالة تحدّد الإجراء الذي سيتم تنفيذه عند النقر على الزر تم، عليك ربط الدالة بطريقة العرض Button
.
- في
MainActivity.kt
، في نهاية الدالةonCreate()
، احصل على مرجع للعرض تمButton
. استخدِم الدالةfindViewById()
واتّصِل بـsetOnClickListener
. مرِّر مرجعًا إلى دالة معالج النقرات،addNickname()
.
findViewById<Button>(R.id.done_button).setOnClickListener {
addNickname(it)
}
في الرمز أعلاه، يشير it
إلى done_button
، وهو طريقة العرض التي تم تمريرها كمعلَمة.
- شغِّل تطبيقك وأدخِل لقبًا وانقر على الزر تم. لاحظ كيف تم استبدال مربّع تعديل النص والزر بعرض نص الاسم المستعار.
لاحظ أنّه حتى بعد أن ينقر المستخدم على الزر تم، تظل لوحة المفاتيح مرئية. هذا السلوك هو الإعداد التلقائي.
الخطوة 3: إخفاء لوحة المفاتيح
في هذه الخطوة، ستضيف رمزًا برمجيًا لإخفاء لوحة المفاتيح بعد أن ينقر المستخدم على الزر تم.
- في
MainActivity.kt
، في نهاية الدالةaddNickname()
، أضِف الرمز التالي. إذا أردت الحصول على مزيد من المعلومات حول طريقة عمل هذا الرمز، يمكنك الاطّلاع على مستنداتhideSoftInputFromWindow
.
// Hide the keyboard.
val inputMethodManager = getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
inputMethodManager.hideSoftInputFromWindow(view.windowToken, 0)
- شغِّل تطبيقك مرة أخرى. يُرجى العِلم أنّه بعد النقر على تم، سيتم إخفاء لوحة المفاتيح.
لا يمكن للمستخدم تغيير الاسم المستعار بعد النقر على الزر تم. في المهمة التالية، ستجعل التطبيق أكثر تفاعلية وتضيف وظيفة تتيح للمستخدم تعديل الاسم المستعار.
في هذه المهمة، ستضيف أداة معالجة نقرات إلى عرض نص اللقب. يخفي برنامج معالجة النقرات عرض نص الاسم المستعار، ويعرض نص التعديل، ويعرض الزر تم.
الخطوة 1: إضافة أداة معالجة نقرات
- في
MainActivity
، أضِف دالة معالجة النقرات باسمupdateNickname(view: View)
لعرض النص الخاص بالاسم المستعار.
private fun updateNickname (view: View) {
}
- داخل الدالة
updateNickname
، احصل على مرجع لنص التعديلnickname_edit
، واحصل على مرجع للزر تم . لإجراء ذلك، استخدِم طريقةfindViewById()
.
val editText = findViewById<EditText>(R.id.nickname_edit)
val doneButton = findViewById<Button>(R.id.done_button)
- في نهاية الدالة
updateNickname
، أضِف رمزًا برمجيًا لعرض النص القابل للتعديل وزر تم وإخفاء عرض النص.
editText.visibility = View.VISIBLE
doneButton.visibility = View.VISIBLE
view.visibility = View.GONE
- في
MainActivity.kt
، في نهاية الدالةonCreate()
، استدعِsetOnClickListener
في عرض النصnickname_text
. مرِّر مرجعًا إلى دالة معالج النقرات، وهيupdateNickname()
.
findViewById<TextView>(R.id.nickname_text).setOnClickListener {
updateNickname(it)
}
- شغِّل تطبيقك. أدخِل لقبًا، ثم انقر على الزر تم، ثم انقر على عرض اللقب
TextView
. يختفي عرض اللقب، ويصبح النص القابل للتعديل والزر تم مرئيَين.
يُرجى العِلم أنّه بشكلٍ تلقائي، لا يكون للعرض EditText
تركيز ولا تظهر لوحة المفاتيح. يصعب على المستخدم معرفة أنّ عرض نص الاسم المستعار قابل للنقر. في المهمة التالية، ستضيف التركيز والأسلوب إلى عرض نص الاسم المستعار.
الخطوة 2: ضبط التركيز على طريقة العرض EditText وعرض لوحة المفاتيح
- في نهاية الدالة
updateNickname
، اضبط التركيز على طريقة العرضEditText
. استخدِم طريقةrequestFocus()
.
// Set the focus to the edit text.
editText.requestFocus()
- في نهاية الدالة
updateNickname
، أضِف رمزًا لجعل لوحة المفاتيح مرئية.
// Show the keyboard.
val imm = getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
imm.showSoftInput(editText, 0)
الخطوة 3: إضافة لون خلفية إلى طريقة عرض TextView الخاصة باللقب
- اضبط لون خلفية عرض النص
nickname_text
على@color/colorAccent
، وأضِف مساحة متروكة سفلية تبلغ@dimen/small_padding
. ستكون هذه التغييرات بمثابة تلميح للمستخدم بأنّ عرض نص الاسم المستعار قابل للنقر.
android:background="@color/colorAccent"
android:paddingBottom="@dimen/small_padding"
- شغِّل تطبيقك النهائي. سيكون حقل النص القابل للتعديل نشطًا، وسيظهر اللقب في حقل النص القابل للتعديل، وسيتم تنسيق عرض نص اللقب.
يمكنك الآن مشاركة تطبيق AboutMe التفاعلي مع أحد الأصدقاء.
مشروع "استوديو Android": AboutMeInteractive
- أداة "محرّر التصميم" في "استوديو Android" هي أداة تعديل مرئية للتصميم. يمكنك استخدام "أداة تعديل التصميم" لإنشاء تصميم تطبيقك عن طريق سحب عناصر واجهة المستخدم إلى التصميم.
EditText
هو أحد عناصر واجهة المستخدم الذي يتيح للمستخدم إدخال النص وتعديله.Button
هو عنصر في واجهة المستخدم يمكن للمستخدم النقر عليه لتنفيذ إجراء. يمكن أن يتألف الزر من نص أو رمز أو كليهما.
أدوات معالجة أحداث النقر
- يمكنك جعل أي
View
يستجيب للنقر عليه من خلال إضافة أداة معالجة النقر إليه. - تتلقّى الدالة التي تحدّد أداة معالجة أحداث النقر العنصر
View
الذي تم النقر عليه.
يمكنك ربط دالة معالجة نقرات بعنصر View
بإحدى الطريقتَين التاليتَين:
- في تنسيق XML، أضِف السمة
android:onClick
إلى العنصر<
View
>
. - برمجيًا، استخدِم الدالة
setOnClickListener(View.OnClickListener)
فيActivity
المقابل.
دورة Udacity التدريبية:
مستندات مطوّري تطبيقات Android:
يسرد هذا القسم مهامًا منزلية محتملة للطلاب الذين يعملون على هذا الدرس التطبيقي العملي كجزء من دورة تدريبية يقودها مدرّب. على المعلّم تنفيذ ما يلي:
- حدِّد واجبًا منزليًا إذا لزم الأمر.
- توضيح كيفية إرسال الواجبات المنزلية للطلاب
- وضع درجات للواجبات المنزلية
يمكن للمدرّبين استخدام هذه الاقتراحات بالقدر الذي يريدونه، ويجب ألا يترددوا في تكليف الطلاب بأي واجبات منزلية أخرى يرونها مناسبة.
إذا كنت تعمل على هذا الدرس العملي بنفسك، يمكنك استخدام مهام الواجب المنزلي هذه لاختبار معلوماتك.
الإجابة عن هذه الأسئلة
السؤال 1
ما هو EditText
الذي يندرج ضمن فئة فرعية منه؟
View
LinearLayout
TextView
Button
السؤال 2
أيّ من قيم السمة visibility
التالية، إذا تم ضبطها على طريقة عرض، تجعل طريقة العرض مخفية ولا تشغل أي مساحة في التصميم؟
visible
Invisible
gone
hide
السؤال 3
بالنسبة إلى طرق العرض EditText
، لا يُنصح بتقديم تلميحات لأنّها تؤدي إلى تشويش حقل الإدخال. صواب أم خطأ؟
- True
- خطأ
السؤال 4
أيّ من العبارات التالية صحيحة بشأن المشاهدات على Button
؟
Button
طريقة العرض هي مجموعة من طرق العرض.- يمكنك عرض ثلاث صور
Button
فقط لكل شاشة. - يمكن النقر على طرق العرض
Button
، وعند النقر، ينفّذ مستمع النقرات المرفق إجراءً. -
Button
هي إضافة لـImageView
.
ابدأ الدرس التالي:
للحصول على روابط تؤدي إلى دروس تطبيقية أخرى في هذه الدورة التدريبية، اطّلِع على الصفحة المقصودة الخاصة بالدروس التطبيقية حول أساسيات Android Kotlin.