PracticU

Fixate Activity Orientation

בלי כתוביותעם כתוביות
PracticU › קורס פיתוח אפליקציות - לאנדרואיד - Android - ב-JAVA › Fixate Activity Orientation
מילון מושגים:
Activity - ב-Android, רכיב שמייצג מסך יחיד של האפליקציה שאיתו המשתמש מתקשר.
סטייט - המידע על מצבו הנוכחי של רכיב או אפליקציה בזמן נתון, שמשתנה ומשפיע על מה שמוצג.
לייאאוט - ארגון וסידור הרכיבים החזותיים על המסך או בדף, כמו מיקום כפתורים, טקסט ותמונות.
תמונה - קובץ גרפי המוצג על המסך. בהקשר של וירטואליזציה או Docker, תבנית מוכנה שממנה יוצרים מכונה או קונטיינר.
תגית - סימון בקוד, למשל ב-HTML, שתוחם רכיב ומגדיר את תפקידו או תכונותיו. גם תווית לסימון וקיטלוג פריטים.
אמולטור - תוכנה שמחקה מכשיר או סביבה אחרת, למשל כדי להריץ ולבדוק אפליקציית מובייל על המחשב.

Fixate Activity Orientation
פתרון נוסף לבעיית שמירת ה-State של ה-Activity בזמן שינוי אוריינטציה: לקבע את האפליקציה לאוריינטציה אחת. הפתרון מתאים כשיש layout אחד בלבד ולא מחליפים layouts לפי האוריינטציה.
מתי זה מתאים
משחקים או הצגת תמונות הם דוגמאות אופייניות, כשרוצים שהמשתמש יראה רק Portrait, רק Landscape, או רק זוג כמו Portrait ו-Reverse Portrait. בדוגמה שמרנו על ImageView עם match_parent, scaleType מסוג fitXY ותמונת משחק מה-drawable. התמונה נועדה ל-Landscape ולכן נראתה מעוותת ב-Portrait. בלי הגבלה, סיבוב המכשיר שינה את האוריינטציה והתמונה נראתה אחרת.
איך מקבעים
1. במניפסט: בתג ה-activity מגדירים screenOrientation.
2. אפשרות קבועה: portrait, landscape, reversePortrait ו-reverseLandscape מקבעות בדיוק את המצב הזה. locked נשארת באוריינטציה שבה המשתמש התחיל. behind לוקחת את האוריינטציה של ה-Activity הקודם.
3. אפשרויות user: user, userPortrait ו-userLandscape תלויות במה שהמשתמש אישר בהגדרות המכשיר (בחלק מהמכשירים).
4. אפשרויות sensor: הסנסור קובע את האוריינטציה, וזו ברירת המחדל אם דבר לא הוגדר. sensorLandscape מאפשר Landscape ו-Reverse Landscape בלבד, ו-sensorPortrait מאפשר Portrait ו-Reverse Portrait בלבד.
מה קורה בבדיקה
עם landscape האפליקציה נשארה ב-Landscape במכשיר האמיתי ובאמולטור, גם כשסובבו את המכשיר לכל כיוון. עם sensorLandscape סיבוב ל-Portrait לא שינה דבר, אבל סיבוב ל-Reverse Landscape כן החליף.
שימו לב
מכיוון שהאוריינטציה קבועה, ה-Activity לא נהרס ונוצר מחדש. ה-Toast ב-onCreate מופיע פעם אחת, והמצבים ששמרתם נשמרים. מצד שני, אי אפשר להחליף layouts לפי אוריינטציה.
כעת אפשר להגביל אפליקציה לאוריינטציה אחת או לשתיים לפי הצורך.
השיעור הבא בקורס: Save Activity State

פרקי ההרצאה: Fixate Activity Orientation

  1. 00:00

    אוריינטציה אחת קבועה לאפליקציה

  2. 00:57

    דוגמת משחק עם תמונה במסך מלא

  3. 01:35

    התמונה מתעוותת כשמסובבים

  4. 02:15

    הגדרת screenOrientation במניפסט

  5. 03:13

    Landscape קבוע במכשיר ובאמולטור

  6. 04:06

    אפשרויות קבועות: Reverse, Locked ו-Behind

  7. 05:08

    אפשרויות User לפי הגדרות המשתמש

  8. 05:41

    אפשרויות Sensor לפי חיישן המכשיר

תמלול ההרצאה: Fixate Activity Orientation

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

  1. 00:02

    הפתרון הבא שאנחנו הולכים לראות עבור שמירת ה-state של ה-activity בזמן שינוי האוריינטציה גם הוא תקף רק כאשר יש לנו layout אחד ויחיד ולא שני layoutים שאנחנו רוצים להחליף ביניהם בזמן שינוי האוריינטציה אבל פתרון הזה טוב כאשר אנחנו רוצים סוג אוריינטציה אחד ויחיד לדוגמה רק portrait או רק landscape או רק portrait ו-reverse portrait

  2. 00:33

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

  3. 01:00

    אז בואו נעשה הדמיה כאילו שיש לנו איזשהו משחק. בואו ניקח image view, נגדיר לו match parent גם רוחב וגם גובה, נגדיר לו scale type fit xy שהתמונה תתפוס את כל מה שניתן, וניתן איזשהו source ויש לנו בתוך drawable תמונה שנקראת game.

  4. 01:25

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

  5. 01:54

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

  6. 02:18

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

  7. 02:42

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

  8. 03:03

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

  9. 03:23

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

  10. 03:40

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

  11. 04:05

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

  12. 04:15

    אז פורטרייט זה אך ורק פורטרייט. לנסקייפ זה אך ורק לנסקייפ. ריברס פורטרייט זה אך ורק ריברס פורטרייט. ריברס לנסקייפ זה אך ורק ריברס לנסקייפ. לוקט זה ה-initial orientation של היוזר.

  13. 04:34

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

  14. 04:58

    לנסקייפ, לוקט ו-BEHIND, זו אוריינטציה קבועה שמגדירים. עכשיו, יש לנו כל מה שמתחיל ב-user. יש לנו אוריינטציה שנקראת user, user portrait ו-user landscape.

  15. 05:13

    עכשיו, בחלק מהמכשירים ה-user יכול לשלוט על הגדרות האוריינטציה ולהגיד, רגע, אני בעצם לא רוצה שיהיה לי בכלל פורטרייט, אני רוצה רק landscape, או אני לא רוצה landscape, אני רוצה רק פורטרייט.

  16. 05:27

    אז אם יש לנו user, זה אומר מה ה-user הגדיר. אם יש לנו user portrait, זה רק ה-portrait שה-user מסכים לו. אם יש לנו user landscape זה רק ה-landscape שמאושר על ידי ה-user.

  17. 05:40

    זאת אומרת, מה ה-user החליט בנוגע ל-landscape. אז אלה האוריינטציות שמתחילות ב-user. לאחר מכן יש לנו אוריינטציות שמתחילות ב-sensors.

  18. 05:49

    סנסור זה אומר האוריינטציה האמיתית שנקבעה על ידי הסנסור של המכשיר. אפשר להגיד שסנסור זה בעצם ה-default אם לא הגדרנו שום דבר ואם ה-user לא הגדיר שום דבר.

  19. 06:00

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

  20. 06:22

    אז יש לנו פה כל מיני

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

ההרצאה הקודמת: Cancel Activity Recreation

ההרצאה הבאה: Save Activity State

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

  • Activity Tracing
  • Activity Logs

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

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