
ImageView עם match_parent, scaleType מסוג fitXY ותמונת משחק מה-drawable. התמונה נועדה ל-Landscape ולכן נראתה מעוותת ב-Portrait. בלי הגבלה, סיבוב המכשיר שינה את האוריינטציה והתמונה נראתה אחרת.activity מגדירים screenOrientation.portrait, landscape, reversePortrait ו-reverseLandscape מקבעות בדיוק את המצב הזה. locked נשארת באוריינטציה שבה המשתמש התחיל. behind לוקחת את האוריינטציה של ה-Activity הקודם.user: user, userPortrait ו-userLandscape תלויות במה שהמשתמש אישר בהגדרות המכשיר (בחלק מהמכשירים).sensor: הסנסור קובע את האוריינטציה, וזו ברירת המחדל אם דבר לא הוגדר. sensorLandscape מאפשר Landscape ו-Reverse Landscape בלבד, ו-sensorPortrait מאפשר Portrait ו-Reverse Portrait בלבד.landscape האפליקציה נשארה ב-Landscape במכשיר האמיתי ובאמולטור, גם כשסובבו את המכשיר לכל כיוון. עם sensorLandscape סיבוב ל-Portrait לא שינה דבר, אבל סיבוב ל-Reverse Landscape כן החליף.onCreate מופיע פעם אחת, והמצבים ששמרתם נשמרים. מצד שני, אי אפשר להחליף layouts לפי אוריינטציה.הטקסט המלא של הדקות הראשונות בהרצאה «Fixate Activity Orientation» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
הפתרון הבא שאנחנו הולכים לראות עבור שמירת ה-state של ה-activity בזמן שינוי האוריינטציה גם הוא תקף רק כאשר יש לנו layout אחד ויחיד ולא שני layoutים שאנחנו רוצים להחליף ביניהם בזמן שינוי האוריינטציה אבל פתרון הזה טוב כאשר אנחנו רוצים סוג אוריינטציה אחד ויחיד לדוגמה רק portrait או רק landscape או רק portrait ו-reverse portrait
או רק Landscape ו-Reverse Landscape. בדרך כלל יש את המצב הזה כשאנחנו רואים משחקים או מצב שבו אנחנו בעצם רואים תמונות ואנחנו רוצים שהיוזר יוכל להסתכל רק על אוריינטציה אחת ולא יוכל להזיז את המכשיר. כלומר גם אם הוא יזיז את המכשיר וישנה את האוריינטציה זה לא באמת ישפיע מבחינת האוריינטציה של האפליקציה שלנו וכל הזמן יראו אוריינטציה אחת ויחידה.
אז בואו נעשה הדמיה כאילו שיש לנו איזשהו משחק. בואו ניקח image view, נגדיר לו match parent גם רוחב וגם גובה, נגדיר לו scale type fit xy שהתמונה תתפוס את כל מה שניתן, וניתן איזשהו source ויש לנו בתוך drawable תמונה שנקראת game.
ומה שאנחנו רואים כרגע זה בעצם את כל התמונה שתופסת לנו את כל המסך. כמו שאתם רואים התמונה הזאת היא קצת מעוותת כי היא מיועדת להיות תמונה שמוצגת בלנסקייפ והמכשיר כרגע מוצג בפורטרייט ואם אנחנו נריץ את זה אז אנחנו נוכל לראות שהיוזר יוכל כמובן לשנות את האוריינטציה הנה התוכנית רצה על המכשיר הנה התוכנית רצה על האמולטור בואו ניקח
את המכשיר ונשנה אותו ואנחנו רואים שכמובן אין שום בעיה לשנות את האוריינטציה וגם אם אנחנו משתמשים באמולטור נשנה את האוריינטציה ואנחנו רואים שהתמונה באמת משתנה והמשחק נראה פעם ככה ופעם ככה וכאשר האוריינטציה היא בפורטרייט התמונה מעוותת ואנחנו לא רוצים שהיוזר יוכל בכלל להסתכל
על המשחק או על התמונה בצורה כזאת. אז איך אנחנו מגבילים את הדבר הזה? אז מה שאנחנו עושים ועושים את זה ברמת המניפסט אנחנו ניגשים למניפסט ואנחנו ניגשים לתגית של האקטיביטי ובתגית של האקטיביטי אנחנו רוצים להגדיר סקרין אוריינטיישן ויש לנו מספר אפשרויות
לתת לסקרין אוריינטיישן אז בואו נעבור על האפשרויות הנפוצות ונראה מה ההבדלים ביניהם אז קודם כל יש לנו פשוט אפשרות לתת פורטרייט לדוגמה אם אנחנו נותנים פורטרייט זה אומר שאנחנו רוצים שהמשחק שלנו או שהאפליקציה תהיה רק בפורטרייט ולא בלנדסקייפ.
האמת שבמקרה הזה אנחנו רוצים בעצם לתת לנדסקייפ. בואו נריץ את זה והנה אנחנו רואים שכאשר האפליקציה רצה על המכשיר האמיתי, אוטומטית אנחנו רואים שהאוריינטציה הסתדרה כלנדסקייפ.
הנה אנחנו רצים גם על האמולטור ואוטומטית זה לנדסקייפ. עכשיו אני לוקח את המכשיר האמיתי ואני מסובב אותו, אני כרגע מחזיק אותו בריברס לנדסקייפ, אני כרגע מחזיק אותו בפורטרייט, בריברס פורטרייט, שום דבר לא משפיע על האוריינטציה.
גם אם ניקח את האמולטור ונשנה אותו, אנחנו נוכל לראות שכרגע זה לנדסקייפ ואפילו שזה פורטרייט אנחנו עדיין נמצאים בלנדסקייפ. זאת אומרת שאם אנחנו משתמשים בהגדרה של סקרין אוריינטיישן אנחנו מגדירים בעצמנו מה אוריינטיישן שאנחנו רוצים וזאת האוריינטציה שנמצאת אצל האפליקציה שלנו אפילו שהיוזר ישנה פיזית את המכשיר.
אז מה ההבדלים בין כל האופציות השונות שהיו שם? אז בואו נראה. היה לנו כאן מספר אופציות שמתארות את האוריינטציה הספציפית.
אז פורטרייט זה אך ורק פורטרייט. לנסקייפ זה אך ורק לנסקייפ. ריברס פורטרייט זה אך ורק ריברס פורטרייט. ריברס לנסקייפ זה אך ורק ריברס לנסקייפ. לוקט זה ה-initial orientation של היוזר.
אותה אוריינטציה שהיוזר התחיל איתה, זאת האוריינטציה שתישאר למשך כל האפליקציה. BEHIND זה אומר שהאוריינטציה של האקטיביטי שלנו נקבעת לפי האוריינטציה שהייתה באקטיביטי הקודמת ו-BEHIND תישאר בדיוק את אותו הדבר. זאת אומרת שכל האופציות שראינו עכשיו, פורטרייט, ריברס פורטרייט, לנסקייפ, ריברס
לנסקייפ, לוקט ו-BEHIND, זו אוריינטציה קבועה שמגדירים. עכשיו, יש לנו כל מה שמתחיל ב-user. יש לנו אוריינטציה שנקראת user, user portrait ו-user landscape.
עכשיו, בחלק מהמכשירים ה-user יכול לשלוט על הגדרות האוריינטציה ולהגיד, רגע, אני בעצם לא רוצה שיהיה לי בכלל פורטרייט, אני רוצה רק landscape, או אני לא רוצה landscape, אני רוצה רק פורטרייט.
אז אם יש לנו user, זה אומר מה ה-user הגדיר. אם יש לנו user portrait, זה רק ה-portrait שה-user מסכים לו. אם יש לנו user landscape זה רק ה-landscape שמאושר על ידי ה-user.
זאת אומרת, מה ה-user החליט בנוגע ל-landscape. אז אלה האוריינטציות שמתחילות ב-user. לאחר מכן יש לנו אוריינטציות שמתחילות ב-sensors.
סנסור זה אומר האוריינטציה האמיתית שנקבעה על ידי הסנסור של המכשיר. אפשר להגיד שסנסור זה בעצם ה-default אם לא הגדרנו שום דבר ואם ה-user לא הגדיר שום דבר.
אז מה שהסנסור של המכשיר קובע זה מה שיש לנו. סנסור לנדסקייפ זה אך ורק לנדסקייפ או ריברס לנדסקייפ שניהם ביחד לפי הסנסור של המכשיר. סנסור פורטרייט זה אך ורק פורטרייט או ריברס פורטרייט של המכשיר.
אז יש לנו פה כל מיני