PracticU

Changing Toast Layout

בלי כתוביותעם כתוביות
PracticU › קורס פיתוח אפליקציות - לאנדרואיד - Android - ב-JAVA › Changing Toast Layout
מילון מושגים:
לייאאוט - ארגון וסידור הרכיבים החזותיים על המסך או בדף, כמו מיקום כפתורים, טקסט ותמונות.
תמונה - קובץ גרפי המוצג על המסך. בהקשר של וירטואליזציה או Docker, תבנית מוכנה שממנה יוצרים מכונה או קונטיינר.
רכיב - יחידת בניין עצמאית וניתנת לשימוש חוזר בתוך מערכת או ממשק משתמש, שאחראית על חלק מוגדר מהתפקוד.
Namespace - מרחב שמות שמקבץ שמות של טיפוסים ורכיבים ומונע התנגשות בין שמות זהים בחלקים שונים של הקוד.
Android - מערכת הפעלה מבוססת Linux לטלפונים ולמכשירים ניידים, שפותחה על ידי גוגל.
XML - שפת סימון לייצוג נתונים מובְנים בעזרת תגיות, המשמשת להחלפת מידע בין מערכות ולקובצי הגדרות.
Activity - ב-Android, רכיב שמייצג מסך יחיד של האפליקציה שאיתו המשתמש מתקשר.
מחלקה - תבנית בתכנות מונחה עצמים שמגדירה אילו נתונים ופעולות יהיו לאובייקטים שנוצרים ממנה.

Changing Toast Layout
אפשר להחליף לחלוטין את ה-layout של ה-Toast ב-layout משלנו, עם תמונה, כותרת והודעה, ולהשתמש בו בכל הפרויקט להצגת הודעות הצלחה ושגיאה. ההרצאה בונה את ה-layout, מנפחת אותו (inflate) בקוד, ואורזת את הכל בפונקציות סטטיות.
בניית ה-layout
1. קובץ חדש: מקש ימני על layout, New > Layout Resource File, ושם custom_toast עם LinearLayout כשורש. נותנים לו id, בדוגמה linearLayoutToast, והוא אנכי.
2. רקע כ-shape: ב-drawable נוצר shape_toast שהוא rectangle עם גרדיאנט (אפור לכחול, זווית 45), stroke לבן ב-2dp ו-corners של 20dp, ומוצב כ-background.
3. הרכיבים: LinearLayout אופקי שמכיל ImageView בגודל 40dp (עם id) ו-TextView של הכותרת, גודל 25sp ו-bold, ממורכז אנכית. מתחתיו TextView של ההודעה.
4. tools:text ו-tools:src: כדי לראות בדיזיינר טקסט ותמונה זמניים, בלי שיוצגו בזמן ריצה, משתמשים ב-namespace בשם tools במקום android (מוסיפים אותו עם Alt+Enter). הוא פועל רק בדיזיינר.
5. תמונות: לתיקיית drawable נוספו שתי תמונות, error ו-success.
ניפוח ה-layout בקוד
1. יוצרים טוסט ריק: Toast.makeText עם this ומשך, בלי הודעה.
2. Layout Inflator: קובץ layout הוא רק XML. כדי להפוך אותו לרכיבים ויזואליים אמיתיים צריך "לנפח" אותו (inflate). מקבלים את המנפח מה-activity עם getLayoutInflater(), וקוראים ל-inflate עם R.layout.custom_toast ועם ה-id של ה-layout.
3. ממלאים את הרכיבים: מוצאים את התמונה והכותרת וההודעה בתוך ה-layout המנופח עם findViewById, ואז setImageResource(R.drawable.success) ו-setText לכותרת ולהודעה (בדוגמה "Last" ו"הורדה הסתיימה בהצלחה").
4. מחליפים את ה-layout של הטוסט: toast.setView(linearLayoutToast), מוסיפים setGravity למרכז ו-show.
אורזים בפונקציות
במחלקה CustomToast נכתבו successMessage ו-errorMessage, כל אחת עם context, כותרת והודעה, ופונקציה פרטית showMessage שמקבלת גם imageId. שתי הפונקציות הציבוריות קוראות אליה עם R.drawable.success או R.drawable.error. נדרש Activity ולא Context רגיל בגלל getLayoutInflater. מהמסך קוראים ל-CustomToast.successMessage(this, ...) ול-errorMessage.
אחרי ההרצאה אפשר להציג בכל מקום הודעות הצלחה ושגיאה מעוצבות בשורה אחת, מבלי לחזור על הקוד.

פרקי ההרצאה: Changing Toast Layout

  1. 00:00

    Layout מותאם אישית ל-Toast

  2. 01:03

    יצירת קובץ Layout חדש לטוסט

  3. 03:01

    עיצוב Shape עם Gradient לרקע

  4. 05:10

    הוספת תמונה וכותרת ל-Layout

  5. 07:06

    הוספת TextView להודעה

  6. 08:10

    שימוש ב-tools:text בדיזיינר

  7. 10:19

    תמונות הצלחה ושגיאה לטוסט

  8. 11:42

    ניפוח ה-Layout עם LayoutInflater

תמלול ההרצאה: Changing Toast Layout

הטקסט המלא של הדקות הראשונות בהרצאה «Changing Toast Layout» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.

  1. 00:03

    אחרי שראינו מה זה טוסט, איך לבצע טוסט ואיך לעצב אותו, בואו נראה איך אנחנו יכולים להגיע לרמה אחרת קצת מבחינת העיצוב על ידי זה שאנחנו פשוט מגדירים layout אחר לגמרי עבור הטוסט.

  2. 00:22

    יכול להיות שאתם רוצים פעם אחת להשקיע ולעצב לעצמכם איזשהו טוסט הרבה יותר מרשים, ומעכשיו אתם יכולים להשתמש בכל מקום בפרויקט עם הטוסט המטורף הזה שפעם אחת אתם בונים.

  3. 00:39

    לצורך כך אנחנו צריכים לבנות layout משלנו ולהחליף את ה-layout הסטנדרטי של הטוסט. אז קודם כל ברגע שאנחנו פותחים פרויקט אנדרואיד אנחנו כמובן רואים שיש לנו פה את ה-activity main layout הזה ואנחנו צריכים להבין שכל layout מאפשר להציג UI על מסך או על חלק ממסך לדוגמה על Toast אז מה שאנחנו רוצים לעשות זה לבנות layout אחר משלנו אז אני לוחץ בבקשה

  4. 01:15

    אם אני פה על תיקיית ה-Layouts הולך ל-New ובוחר layout resource file בואו ניתן לו את השם custom-tost אנחנו רואים שה-root-element זה Linear-Layout זה מתאים לנו בואו נבצע אוקיי ויש לנו עכשיו שני לייאוטס, אחד המיין אקטיביטי ואחד קאסטום טוסט.

  5. 01:45

    בואו נשים את ה-XML שלו ונראה אותו פה בצד. נסדר טיפה את הלייאוט, יש לנו כאן את ה-Weed ואת ה-Height, יש לנו את ה-Orientation, נביא אותו למטה, שתמיד ה-Weed וה-Height יהיו ראשונים כי הם שדות חובה.

  6. 02:03

    ומה שאנחנו רוצים לעשות זה לעצב את הלייאוט הזה כך שהוא יתאים לכל הטוסטים שנרצה. מה שאנחנו רוצים לעצב זה לא רק הודעה אלא בוא נניח שאנחנו רוצים איזושהי כותרת, איזושהי הודעה עצמה מתחת לכותרת וליד הכותרת אפילו תמונה.

  7. 02:24

    את כל הדברים האלה אין בטוסט רגיל אז אנחנו פעם אחת בונים את הלייאוט הזה ומעכשיו בכל טוסט שלנו נוכל להציג את הטוסט המרשים הזה תמונה, כותרת ותוכן.

  8. 02:39

    אז בואו נראה איך אנחנו עושים את זה. דבר ראשון בואו ניתן כאן איזשהו ID כי אנחנו נצטרך אותו אחר כך. בואו נקרא לזה LinearLayoutTost בנוסף יש לנו פה את הוורטיקל ואנחנו רוצים גם להגדיר Background אבל אם אנחנו כבר מתעסקים עם עיצובים ורוצים לבצע משהו מרשים אז בואו ניקח ונעצב איזושהי שייפ שבעבר ראינו שזה ניתן

  9. 03:11

    לביצוע עם איזשהו גרדיאנט כזה. אז נלך לדקיית ה-Drawable, New, Drawable Resource File וניתן פה את השם ShapeTost, נשנה את הסלקטור ב-shape, נגדיר שה-shape היא ריקטנגל כי ה-tost הוא ריקטנגל.

  10. 03:39

    יכלנו גם לקחת כל צורה אחרת. בואו ניקח גרדיאנט, נגדיר כאן Start, Color, נגדיר כאן End, Color, כמובן אנחנו הולכים תכף לשנות את הצבעים, נגדיר כאן Angle, 45 סיימנו את הגרדיאנט אנחנו רוצים להגדיר סטרוק כך לבן

  11. 04:16

    בגודל 2 dp ואנחנו רוצים להגדיר קורנר רדיוס 20 dp ובואו נבחר את הצבעים נגדיר שהסטארט קולור הוא סוג של איזשהו אפור ובואו ניקח אנד קולור משהו כזה סוג של כחול כזה וכעת אנחנו רוצים לקחת את הזאת ולהגדיר אותה כ-Background עבור ה-Layout של הטוסט וזה נקרא Shape Tost. אז קודם כל

  12. 05:04

    אנחנו כבר רואים שה-Layout הזה מתחיל לקבל צורה מעוצבת כזאת וכל מה שנשאר לנו לעשות זה להגדיר את הרכיבים בתוכו.

  13. 05:13

    אז אנחנו רוצים שיהיה לנו תמונה ובסמוך אליה בצורה אופקית אנחנו רוצים את הכותרת ומתחת לשניהם אנחנו רוצים את ההודעה עצמה. לכן בואו ניקח Linear Layout, נגדיר ראפ קונטנט כדי ששניהם יהיו אחד ליד השני, יכלנו גם לקחת כל לאוט אחר.

  14. 05:37

    ניקח אימג' view, נגדיר שהוויד זה בעצם 40 dp, נגדיר it 40 dp, ניקח תמונה כזאתי לא גדולה, ניתן id image view title, ניתן מרג'ין וניתן איזה עשרה dps בצורה כזאת.

  15. 06:17

    ליד התמונה אנחנו רוצים טקסט view, ניקח wrap-content, ניקח ID, טקסט view-title, מרג'ין, רוויטי, בואו ניתן סנטר ורטיקל שיסתדר בדיוק עם התמונה, טקסט סייז, איזה 25 SP,

  16. 06:57

    טקסט סטייל, בואו ניתן לו בולד ויש לנו כרגע את הטקסט. לאחר מכן אנחנו רוצים בעצם עוד טקסט view, בואו ניקח את כל הטקסט view הזה ונשים אותו כאן מתחת גם הוא ראפ קונטנט ה-id שלו יהיה טקסט view message לאחר מכן יש לנו סנטר הוריזונטל כאן ו-25 סבבה עכשיו אנחנו לא בעצם רואים מה בעצם

  17. 07:38

    זה יצא אז בכדי לראות מה אנחנו רואים כאן כדאי שניתן איזה שהם טקסטים זמניים כאלה בואו רק נחליף את זה במקום match parent ל-wrap-content שהוא יתפוס בדיוק כמה שהוא צריך וכרגע הוא לא תופס הרבה, הוא תופס לי רק את התמונה טיפה.

  18. 08:04

    אז מה שאנחנו רוצים לעשות זה לתת איזה שהם ערכים לטקסטים. כאן אנחנו רוצים לתת header, טקסט header וכאן אנחנו רוצים לתת טקסט מסג'.

  19. 08:23

    מה הבעיה עם מה שעשיתי עכשיו? הבעיה היא שהערך טקסט זה באמת ערך אמיתי שאנחנו רוצים לתת, אבל אנחנו לא באמת רוצים להציג את המחוזת header.

  20. 08:37

    כל מה שאנחנו רוצים לעשות זה רק בדיזיינר לראות איפה זה נמצא, כנ"ל התמונה. פה אנחנו רוצים להציב איזושהי תמונה, ואנחנו רוצים מבחינת הדיזיינר לראות רק איך זה נראה.

  21. 08:51

    עכשיו, אם אנחנו משתמשים עם התכונה טקסט, זה אומר שכאשר ה-Layout הזה יהפוך להיות אובייקט אמיתי, אז אנדרואיד באמת תשים בתוכו את המילה "Header", ואז תחליף אותה למילה שלנו.

  22. 09:07

    אנחנו לא רוצים שאנדרואיד בכלל ישים את המילה "Header" כאן בכותרת, ואת המילה "Message" אנחנו רק רוצים לראות את זה בדיזיינר.

  23. 09:16

    ולכן יש לנו כאן יכולת להשתמש במשהו שנקרא "Tools". אולי ננסה לעשות את זה כאן, "Tools" בצורה כזאת. עכשיו המערכת אומרת לי שהיא לא מכירה את זה, אז אנחנו נצטרך ללחוץ על Alt-Enter ואז מה שקרה ושהתווסף לנו ה-Namespace הזה פה למעלה ו-Tools זה ניימספייס שאחראי אך ורק על הדיזיינר וברגע שכתבנו לו

  24. 09:46

    tools.txt במקום android.txt אז עדיין אנחנו רואים כאן את ההדר אבל שום דבר שקשור לזמן הריצה לא יתבצע כאן. ה-Tools מיועד אך ורק לדיזיינר וההדר הזה נראה רק בדיזיינר ולא קיים בזמן הריצה.

  25. 10:05

    בואו נשים את זה גם כאן, tools, בצורה כזאת, ושחררנו את המחרוזות האלה מזמן הריצה ואנחנו כן רואים אותן בזמן הפיתוח. בואו נשים כאן גם תמונה והכנתי כאן בדסטופ שתי תמונות, הרור וסקסס במיוחד עבור טוסטים להצגת הודעות הצלחה והודעות שגיאה.

  26. 10:30

    אז בואו נחזור לאנדרואיד סטודיו, נלך לדראבל ונדביק בתוכו את שתי התמונות. הנה אנחנו רואים אותם וכעת בואו ניגש לתמונה ובמקום לתת לה src in איזושהי תמונה, רציתי לתת לה את ה success אז במקום android אנחנו מחליפים את זה לתולס ואנחנו עדיין רואים את התמונה אבל בזמן הריצה התמונה הזאת לא תינתן ואז תוחלף אלא רק התמונה שנחליט

  27. 11:05

    בזמן הריצה היא היחידה שתינתן. אז הנה אנחנו רואים טוסט ממש מעוצב בצורה יפה והשאלה היא איך אנחנו לוקחים את הלייאוט הזה שבנינו ואין לו שום קשר לשום טוסט ופשוט מחליפים את הלייאוט הסטנדרטי של הטוסט בלייאוט הזה ולא רק זה גם

  28. 11:26

    קובעים מהי התמונה שאנחנו רוצים מהי הכותרת ומהי ההודעה. לצורך כך בואו נחזור לאקטיביטי מיין יש לנו פה את הנחצן הזה בואו נגדיר כאן show success toast on-click show success toast ניגש לקוד ומה שאנחנו רוצים לעשות זה לבנות אובייקט toast זה הדבר הראשון על ידי הפונקציה make text this זה אנחנו אנחנו לא

  29. 12:11

    רוצים לתת כרגע הודעה מפני שאנחנו לא רוצים שההודעה הזאת תלך ללאוט הדיפולטי של הטוסט אלא אנחנו רוצים ללאוט שלנו אנחנו כן רוצים לתת אורך ומה שאנחנו רוצים לעשות זה להתחיל להגדיר את ה-Layout.

  30. 12:34

    אז קודם כל בכדי לקחת קובץ Layout ולגרום לו להיות ממש אובייקט UI שמוצג על פני משהו אנחנו צריכים להשתמש במחלקה שנקראת Layout Inflator לבנות אובייקט Layout Inflator. Inflator זה בא מהמונח שזה בעצם לנתח משהו מה הרעיון layout זה רק קובץ xml ואם אנחנו רוצים לקחת את המידע הטקסטואלי הזה של קובץ הxml את התוכן של הקובץ xml ולגרום לו להיות באמת

  31. 13:18

    אובייקטים אמיתיים ויזואליים שרואים אותם אז הקונספט באנדרואיד אומר שאנחנו צריכים לבצע מעין הוויכוח של ה-XML וזה בעצם ההפיכה של כל האלמנטים שנמצאים פה לאיזשהו אובייקט ויזואלי אמיתי.

  32. 13:36

    הרכיב שעושה את זה נקרא Layout Inflator. עכשיו, אנחנו לא בונים אובייקט חדש ל-Layout Inflator, אנחנו צריכים לקחת איזשהו Layout Inflator מהמערכת.

  33. 13:51

    למי יש Layout Inflator? ל-Activity. זה אחד מהשירותים של ה-Activity או של ה-Context. והשירות הזה נקרא getLayoutInflator אז הפונקציה הזאת getLayoutInflator מחזירה לנו אובייקט שמסוגל לנפח קבצי XML בכדי להפוך אותם ל-Layout אמיתי.

  34. 14:10

    ה-Layout שבנינו נקרא LinearLayout אז בואו נבנה LinearLayoutPost שווה בדיוק ה-Layout שבנינו ואנחנו רוצים לגשת ל-LayoutInflator ושמנפח לנו את ה-Layout ולקרוא לפונקציה inflate בשביל לנפח את ה-Layout.

  35. 14:29

    הדבר הראשון שהוא שואל אותנו ואוקיי איזה ליאאוט אתם רוצים לנפח, זה יהיה r.Layout; וקראנו לו custom-tost. הדבר השני שהוא שואל אותנו זה אוקיי מה ה-ID

לקורס המלא: קורס פיתוח אפליקציות לאנדרואיד

ההרצאה הקודמת: Custom Toast

ההרצאה הבאה: אנדרואיד Debugger

הרצאות קשורות מקורסים אחרים

  • יצירת Layout
  • SCD - Slowly Changing Dimension - חלק 1
  • יצירת קומפוננטה של Layout ב-React
  • Page Layout - Float - CSS

קורסים נוספים במסלול

  • קורס יסודות התכנות - שפת JAVA - קורס ג'אווה למתחילים
  • קורס פיתוח אפליקציות - לאייפון iPhone iOS - ב-Swift-Xcode
  • קורס פלאטר - Flutter - שפת DART של גוגל למובייל - פיתוח אפליקציות לאנדרואיד ואייפון
  • קורס PhoneGap - פיתוח אפליקציות לאנדרואיד ואייפון