ה-codelab הזה הוא חלק מהקורס Android Kotlin Fundamentals. כדי להפיק את המרב מהקורס הזה, מומלץ לעבוד על ה-codelabs לפי הסדר. כל ה-codelab של הקורס מפורטים בדף הנחיתה של ה-codelab בנושא יסודות Kotlin ל-Android.
מה שכדאי לדעת
- יצירת אפליקציית Android בסיסית ב-Kotlin.
- הפעלת אפליקציית Android באמולטור או במכשיר.
- יצירת פריסה לינארית באמצעות כלי הפריסה של Android Studio .
- יצירת אפליקציה פשוטה שמשתמשת ב-
LinearLayout
, ב-TextView
, ב-ScrollView
ובלחצן עם handler לקליקים.
מה תלמדו
- איך מקבלים קלט מהמשתמש באמצעות תצוגת
EditText
. - איך מגדירים טקסט לתצוגה
TextView
באמצעות הטקסט מהתצוגהEditText
. - איך עובדים עם
View
ועםViewGroup
- איך משנים את החשיפה של
View
.
הפעולות שתבצעו:
- להוסיף אינטראקטיביות לאפליקציה AboutMe, שהיא מ-codelab קודם.
- מוסיפים
EditText
כדי שהמשתמש יוכל להזין טקסט. - מוסיפים
Button
ומטמיעים את click handler שלו.
ב-codelab הזה, מרחיבים את האפליקציה AboutMe כדי להוסיף אינטראקציה עם המשתמש. מוסיפים שדה לכינוי, לחצן סיום ותצוגת טקסט להצגת הכינוי. אחרי שהמשתמש מזין כינוי ומקיש על הלחצן סיום, תצוגת הטקסט מתעדכנת ומוצג בה הכינוי שהוזן. המשתמש יכול לעדכן שוב את הכינוי על ידי הקשה על תצוגת הטקסט.
במשימה הזו מוסיפים שדה קלט של EditText
כדי לאפשר למשתמש להזין כינוי.
שלב 1: מתחילים
- אם אין לכם כבר את אפליקציית AboutMe מ-codelab קודם, מורידים את הקוד לתחילת הדרך, AboutMeInteractive-Starter. זה אותו קוד שסיימתם ב-codelab קודם.
- פותחים את הפרויקט AboutMeInteractive-Starter ב-Android Studio.
- מריצים את האפליקציה. מוצג תצוגת טקסט של שם, תמונת כוכב וקטע טקסט ארוך בתצוגת גלילה.
שימו לב שהמשתמש לא יכול לשנות את הטקסט.
אפליקציות מעניינות יותר אם המשתמש יכול ליצור אינטראקציה עם האפליקציה, למשל אם הוא יכול להזין טקסט. כדי לקבל קלט טקסט, מערכת Android מספקת ווידג'ט של ממשק משתמש שנקרא edit text. מגדירים טקסט לעריכה באמצעות EditText
, מחלקת משנה של TextView
. שדה לעריכת טקסט מאפשר למשתמש להזין ולשנות קלט טקסט, כמו שמוצג בצילום המסך שלמטה.
שלב 2: מוסיפים רכיב EditText
- ב-Android Studio, פותחים את קובץ הפריסה
activity_main.xml
בכרטיסייה Design. - בחלונית Palette, לוחצים על Text.
Ab TextView, שהואTextView
, מופיע בחלק העליון של רשימת רכיבי הטקסט בחלונית Palette. מתחת ל-Ab TextView יש כמה תצוגותEditText
.
בחלון Palette, שימו לב שהסמל שלTextView
מציג את האותיות Ab ללא קו תחתון. לעומת זאת, בסמליםEditText
מופיע Ab עם קו תחתון. הקו התחתון מציין שאפשר לערוך את התצוגה.
לכל אחת מ-EditText
התצוגות, מערכת Android מגדירה מאפיינים שונים, והמערכת מציגה את שיטת הקלט המתאימה (למשל מקלדת וירטואלית). - גוררים את הטקסט לעריכה PlainText אל עץ הרכיבים וממקמים אותו מתחת ל-
name_text
ומעלstar_image
. - משתמשים בחלונית Attributes (מאפיינים) כדי להגדיר את המאפיינים הבאים בתצוגה
EditText
.
מאפיין | ערך |
|
|
|
|
|
|
- מריצים את האפליקציה. מעל תמונת הכוכב מופיע טקסט שאפשר לערוך, עם הטקסט שמוגדר כברירת מחדל 'שם'.
במשימה הזו, מעצבים את התצוגה EditText
על ידי הוספת רמז, שינוי יישור הטקסט, שינוי הסגנון ל-NameStyle
והגדרת סוג הקלט.
שלב 1: מוסיפים טקסט של רמז
- מוסיפים משאב מחרוזת חדש לרמז בקובץ
string.xml
.
<string name="what_is_your_nickname">What is your Nickname?</string>
- משתמשים בחלונית Attributes (מאפיינים) כדי להגדיר את המאפיינים הבאים בתצוגה
EditText
:
מאפיין | ערך |
|
|
|
|
|
|
- בחלונית מאפיינים, מסירים את הערך
Name
מהמאפייןtext
. ערך המאפייןtext
צריך להיות ריק כדי שהרמז יוצג.
שלב 2: הגדרת מאפיין inputType
המאפיין inputType
מציין את סוג הקלט שהמשתמשים יכולים להזין בתצוגה EditText
. מערכת Android מציגה את שדה הקלט המתאים ואת המקלדת הווירטואלית, בהתאם לסוג הקלט שהוגדר.
כדי לראות את כל סוגי הקלט האפשריים, בחלונית Attributes (מאפיינים), לוחצים על השדה inputType
או על סמל שלוש הנקודות … לצד השדה. תיפתח רשימה עם כל סוגי הקלט שאפשר להשתמש בהם, וסוג הקלט שפעיל כרגע יסומן. אפשר לבחור יותר מסוג קלט אחד.
לדוגמה, לסיסמאות משתמשים בערך textPassword
. שדה הטקסט מסתיר את הקלט של המשתמש.
למספרי טלפון, משתמשים בערך phone
. מוצגת מקלדת מספרים, והמשתמש יכול להזין רק מספרים.
מגדירים את סוג הקלט בשדה הכינוי:
- מגדירים את מאפיין
inputType
לערךtextPersonName
עבורnickname_edit
עריכת הטקסט. - בחלונית Component Tree (עץ הרכיבים), מוצגת אזהרה
autoFillHints
. האזהרה הזו לא רלוונטית לאפליקציה הזו, והיא לא קשורה ל-codelab הזה, לכן אפשר להתעלם ממנה. (מידע נוסף על מילוי אוטומטי זמין במאמר אופטימיזציה של האפליקציה למילוי אוטומטי). - בחלונית מאפיינים , בודקים את הערכים של המאפיינים הבאים בתצוגה
EditText
:
מאפיין | ערך |
|
|
|
|
|
|
|
|
|
|
|
|
| (ריק) |
Button
הוא רכיב בממשק המשתמש שהמשתמש יכול להקיש עליו כדי לבצע פעולה. לחצן יכול להכיל טקסט, סמל או גם טקסט וגם סמל.
במשימה הזו מוסיפים לחצן סיום, שהמשתמש מקיש עליו אחרי שהוא מזין כינוי. הלחצן מחליף את התצוגה EditText
בתצוגה TextView
שבה מוצג הכינוי. כדי לעדכן את הכינוי, המשתמש יכול להקיש על התצוגה TextView
.
שלב 1: מוסיפים לחצן 'סיום'
- גוררים לחצן מהחלונית Palette אל Component Tree. ממקמים את הלחצן מתחת ל
nickname_edit
edit text - יוצרים משאב מחרוזת חדש בשם
done
. נותנים למחרוזת את הערךDone
,
<string name="done">Done</string>
- משתמשים בחלונית Attributes (מאפיינים) כדי להגדיר את המאפיינים הבאים בתצוגה החדשה
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>
בסרגל הימני של עורך הקבצים אפשר לראות את הצבע שמתאים לקוד ה-HEX.
שימו לב לשינוי בצבע של הלחצן בכלי לעריכת עיצוב.
- מריצים את האפליקציה. מתחת לתיבת הטקסט לעריכה אמור להופיע לחצן DONE (סיום) עם סגנון.
אחרי שהמשתמש מזין כינוי ומקיש על הלחצן סיום, הכינוי מוצג בתצוגה TextView
. במשימה הזו, מוסיפים תצוגת טקסט עם רקע צבעוני. בתצוגת הטקסט, הכינוי של המשתמש מוצג מעל star_image
.
שלב 1: מוסיפים TextView לכינוי
- גוררים תצוגת טקסט מהחלונית Palette אל Component Tree. ממקמים את תצוגת הטקסט מתחת ל-
done_button
ומעל ל-star_image
. - משתמשים בחלונית Attributes (מאפיינים) כדי להגדיר את המאפיינים הבאים לתצוגה החדשה
TextView
:
מאפיין | ערך |
|
|
|
|
|
|
שלב 2: שינוי ההגדרה של הנראות של TextView
אפשר להציג או להסתיר תצוגות באפליקציה באמצעות המאפיין visibility
. במאפיין הזה אפשר להזין אחד משלושת הערכים הבאים:
-
visible
: התצוגה גלויה. -
Invisible
: התצוגה מוסתרת, אבל היא עדיין תופסת מקום בפריסה. -
gone
: התצוגה מוסתרת ולא תופסת מקום בפריסה.
- בחלונית Attributes, מגדירים את
visibility
של תצוגת הטקסטnickname_text
ל-gone
, כי לא רוצים שהאפליקציה תציג את תצוגת הטקסט הזו בהתחלה.
שימו לב שכאשר משנים את המאפיין בחלונית Attributes, התצוגה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="" />
תצוגה מקדימה של הפריסה אמורה להיראות כך:
פונקציית ה-handler של הקליקים באובייקט Button
(או בכל תצוגה) מציינת את הפעולה שתתבצע כשמקישים על הלחצן (התצוגה). צריך להטמיע את הפונקציה שמטפלת באירוע הקליק ב-Activity
שמארח את הפריסה עם הלחצן (תצוגה).
הפורמט של מאזין הקליקים הוא בדרך כלל כזה, כאשר התצוגה שהועברה היא התצוגה שקיבלה את הקליק או ההקשה.
private fun clickHandlerFunction(viewThatIsClicked: View) {
// Add code to perform the button click event
}
יש שתי דרכים לצרף את פונקציית click-listener לאירועי לחיצה על לחצן:
- בפריסת ה-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: מוסיפים click listener
- ב-Android Studio, בתיקייה
java
, פותחים את הקובץMainActivity.kt
. - ב-
MainActivity.kt
, בתוך המחלקהMainActivity
, מוסיפים פונקציה בשםaddNickname
. צריך לכלול פרמטר קלט בשםview
מסוגView
. הפרמטרview
הואView
שעליו מופעלת הפונקציה. במקרה כזה,view
יהיה מופע של לחצן DONE.
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
, מגדירים את המאפייןvisibility
של התצוגהTextView
לערךView.VISIBLE
כדי שהיא תהיה גלויה.
nicknameTextView.visibility = View.VISIBLE
שלב 2: מצרפים את מאזין הקליקים ללחצן DONE
עכשיו יש לכם פונקציה שמגדירה את הפעולה שתתבצע כשמקישים על הלחצן DONE. צריך לצרף את הפונקציה לתצוגה Button
.
- ב-
MainActivity.kt
, בסוף הפונקציהonCreate()
, מקבלים הפניה לתצוגה סיוםButton
. משתמשים בפונקציהfindViewById()
וקוראים לפונקציהsetOnClickListener
. מעבירים הפניה לפונקציית click-listener, 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)
- מריצים את האפליקציה שוב. שימו לב שאחרי שמקישים על סיום,המקלדת מוסתרת.
אחרי שהמשתמש מקיש על הלחצן סיום, אין לו אפשרות לשנות את הכינוי. במשימה הבאה, נהפוך את האפליקציה לאינטראקטיבית יותר ונוסיף פונקציונליות שתאפשר למשתמש לעדכן את הכינוי.
במשימה הזו, מוסיפים מאזין לקליקים לתצוגת הטקסט של הכינוי. ה-click listener מסתיר את תצוגת הטקסט של הכינוי, מציג את הטקסט לעריכה ומציג את הלחצן סיום.
שלב 1: מוסיפים click listener
- ב-
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
, מוסיפים קוד להצגת הטקסט לעריכה, להצגת הלחצן DONE ולהסתרת תצוגת הטקסט.
editText.visibility = View.VISIBLE
doneButton.visibility = View.VISIBLE
view.visibility = View.GONE
- ב-
MainActivity.kt
, בסוף הפונקציהonCreate()
, קוראים ל-setOnClickListener
בתצוגת הטקסטnickname_text
. מעבירים הפניה לפונקציה click-listener, שהיא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 Studio: AboutMeInteractive
- הכלי Layout Editor ב-Android Studio הוא כלי לעריכה של עיצובים חזותיים. אתם יכולים להשתמש בכלי לעריכת פריסות כדי ליצור את הפריסה של האפליקציה על ידי גרירת רכיבי ממשק משתמש לפריסה.
-
EditText
הוא רכיב בממשק משתמש שמאפשר למשתמש להזין ולשנות טקסט. Button
הוא רכיב בממשק המשתמש שהמשתמש יכול להקיש עליו כדי לבצע פעולה. לחצן יכול להכיל טקסט, סמל או גם טקסט וגם סמל.
פונקציות מסוג Listener לקליקים
- אפשר להוסיף מאזין קליקים לכל
View
כדי שהוא יגיב להקשה. - הפונקציה שמגדירה את מאזין הקליקים מקבלת את
View
שעליו לחצו.
אפשר לצרף פונקציה של מאזין לקליקים ל-View
באחת משתי דרכים:
- בפריסת ה-XML, מוסיפים את המאפיין
android:onClick
לרכיב<
View
>
. - באופן פרוגרמטי, משתמשים בפונקציה
setOnClickListener(View.OnClickListener)
ב-Activity
המתאים.
קורס ב-Udacity:
מסמכי תיעוד למפתחי Android:
בקטע הזה מפורטות אפשרויות למשימות ביתיות לתלמידים שעובדים על ה-Codelab הזה כחלק מקורס בהנחיית מדריך. המורה צריך:
- אם צריך, מקצים שיעורי בית.
- להסביר לתלמידים איך להגיש מטלות.
- בודקים את שיעורי הבית.
אנשי ההוראה יכולים להשתמש בהצעות האלה כמה שרוצים, ומומלץ להם להקצות כל שיעורי בית אחרים שהם חושבים שמתאימים.
אם אתם עובדים על ה-codelab הזה לבד, אתם יכולים להשתמש במשימות האלה כדי לבדוק את הידע שלכם.
עונים על השאלות הבאות
שאלה 1
מהי המחלקה ש-EditText
היא מחלקת משנה שלה?
View
LinearLayout
TextView
Button
שאלה 2
איזה מבין ערכי המאפיין visibility
הבאים, אם הוא מוגדר בתצוגה, גורם לכך שהתצוגה מוסתרת ולא תופסת מקום בפריסה?
visible
Invisible
gone
hide
שאלה 3
ב-EditText
, לא מומלץ לספק רמזים כי הם יוצרים עומס בשדה הקלט. נכון או לא נכון?
- True
- לא נכון
שאלה 4
איזו מההצהרות הבאות נכונה לגבי תצוגות Button
?
Button
תצוגה היא קבוצת תצוגות.- אפשר להציג רק שלוש תצוגות
Button
בכל מסך. Button
הצפיות ניתנות ללחיצה, ובלחיצה, מאזין הקליקים שמצורף מבצע פעולה.-
Button
הוא תוסף שלImageView
.
עוברים לשיעור הבא:
קישורים ל-codelabs אחרים בקורס הזה מופיעים בדף הנחיתה של ה-codelabs בנושא יסודות Android Kotlin.