
res. ההרצאה מראה איך מגדירים אותו ומה קורה בפועל על אמולטור ועל מכשיר אמיתי.drawable, layout או values, היא ברירת המחדל. תיקייה עם qualifier בשם, למשל values-w820dp, נבחרת רק כשהמכשיר מתאים לתנאי. ב-w820dp האות W היא רוחב, והתנאי הוא רוחב זמין של 820dp ומעלה. המכשיר בודק בעצמו איזה קובץ מתאים.Show in Explorer פותח את הסייר, ושם אפשר לשנות שם תיקייה, למשל מ-820 ל-700, או להעתיק תיקייה.New > Android Resource Directory, בוחרים סוג (למשל values), ומוסיפים qualifier כמו Screen Width. כשמזינים 600 השם הנוצר הוא values-w600dp.Add value resource file, שם קובץ זהה בכל התיקיות (בדוגמה dimens), ובוחרים את ה-qualifier.getResources().getDisplayMetrics(), מחלקים את הפיקסלים ב-density. באמולטור יצא 360 על 592, ובמכשיר האמיתי 600 על 976.dimens הרגיל הוגדר left_margin של 5dp, ובקובץ של w600dp הוגדר 100dp. ב-layout יש הפניה אחת בלבד. באמולטור התקבל רווח קטן, ובמכשיר האמיתי רווח גדול.activity_background בקובץ צבעים רגיל (סגול) ובקובץ של w600dp (צהוב). האמולטור הציג סגול והמכשיר האמיתי צהוב.drawable נוצרה תיקייה drawable-land עם קובץ אחר (אובל ירוק) לאותו שם קובץ. כשמסובבים את המכשיר, או לוחצים Ctrl+F12 באמולטור, הלחצן מקבל את המשאב המתאים. אפשר ליצור את התיקייה גם ישירות בסייר הקבצים, וגם בדיזיינר אפשר לעבור לתצוגת landscape.הטקסט המלא של הדקות הראשונות בהרצאה «Qualifying Resources» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
בסרטונים הקודמים ראינו שאנחנו יכולים להגדיר כל מיני ריסורסס שונים ולהשתמש בהם. אבל מה קורה אם אנחנו רוצים להגדיר ריסורסס שונים עבור מצבים שונים של המכשיר או עבור הגדרות שונות של המכשיר? למה הכוונה?
אולי אנחנו רוצים להגדיר איזשהו ריסורס של שייפ, אבל אנחנו רוצים להציג אותו רק במידה ויש גודל מסך מסוים.
ואם יש גודל מסך אחר או מעל גודל מסך אחר, אנחנו בעצם רוצים להשתמש ב-resource אחר שאנחנו בונים. אפשרות אחרת יכולה להיות צבע רקע עבור המכשיר, במידה והוא נמצא באוריינטציה של פורטרייט, וצבע אחר אם אנחנו נמצאים באוריינטציה של לנדסקייפ, כלומר המכשיר שוכב, וכן הלאה.
יכול להיות כל מיני הגדרות שונות של המכשיר או מצבים שונים של המכשיר שאנחנו רוצים להתאים להם ספציפית resources שאנחנו בונים. לאנדרואיד יש אפשרות לבצע זאת.
איך עושים את זה? קודם כל, הדבר הוא מאוד מאוד פשוט. יש לנו פה את תיקיית ה-resources, זאת תיקיית הרס, ובתוכה יש את התיקיות השונות של ה-resources השונים שאנחנו יכולים להשתמש בהם.
כל מה שאנחנו צריכים להבין זה שהשם של התיקייה הוא זה שקובע מתי ה-resource נלקח לשימוש. אם השם הוא שם רגיל, לדוגמה, drawable או layout או values או כל שם אחר שיכול להיות כאן, אז זה בעצם נחשב שם דיפולט.
אם השם הזה מוגדר בצורה ספציפית יותר אז הוא נלקח לשימוש. מה זה אומר שם ספציפי יותר? זה אומר שהשם מכיל איזשהו qualifier. qualifier זה אומר משהו שמגדיר האם ה-resource הזה יילקח כן או לא בהתאם למכשיר עצמו.
בטח שמתם לב שבתיקיית ה-values יש לנו את קובץ ה-dimens.xml אבל אנחנו רואים שיש לו שניים כאלה אחד שהוא דיפולטי ואחד שהוא מתאים למשהו שנקרא w820dp כעת אנחנו הולכים לראות בדיוק מה זה אומר מה זה ה-w820dp הזה אז למעשה ה-w820dp הזה זה פשוט מאוד קואליפייר שאומר מתי הקובץ השני לקח w אומר וויד ו-820dp אומר 820dp עבור
הוויד של המכשיר. אז אם יש ליוזר מכשיר שהרוחב הנוכחי שלו זה נקרא Available Wid, הרוחב הנוכחי, כלומר כמה הרוחב שבעצם נמדד בצורה הוריזונטלית, אם הרוחב הזה הוא 820 dp או מעל אז מה שנלקח בקובץ הזה בעצם או מה שנמצא בקובץ הזה יותר נכון יילקח עבור המכשיר ולא מה שנמצא בקובץ ה-Default.
מה הקשר לשם של תיקייה? אז כשאנחנו נמצאים כאן באנדרואיד פה למעלה שכתוב אנדרואיד אז בעצם אנחנו רואים את זה בצורה כזאת אם לדוגמה היינו עוברים לפרוג'קט אז היינו רואים את זה בצורה אמיתית איך זה נמצא בדיוק בתוך סייר הקבצים אנחנו יכולים לחפור כאן בתוך תיקיית ה-resources ואז לראות שבעצם יש תיקייה שנקראת values
זאת התיקייה הדיפולטית ויש תיקייה אחרת שנקראת values w820dp ובתוכה יש את הקובץ דיימנס השני בואו נחזיר את זה לאנדרואיד כי זאת בעצם התצוגה היותר נוחה לשימוש ונעשה משהו אחר בואו נלחץ מקשימני על תיקיית ה-values ונבחר ב-show in explorer ואז אנחנו רואים שאנחנו בעצם נשלחים לסייר הקבצים ופה אנחנו יכולים לראות גם את
שתי התיקיות אז דבר ראשון אנחנו יכולים פשוט מאוד לשנות את הדבר הזה, את השם הזה, לכל שם אחר. לדוגמה אנחנו יכולים להחליט שזה בעצם לא 820 אלא 700. אם אנחנו עושים את זה ואנחנו חוזרים לאנדרואיד סטודיו אז לוקח לו שנייה והוא מעדכן את הנתונים ואנחנו רואים שהקובץ הזה יילקח רק עם הרוחב של המכשיר הוא 700 dp ומעלה.
אנחנו יכולים לגשת לסייר הקבצים ופשוט לשכפל את זה ctrl+c, לשנות לו את השם ולהגיד רגע בעצם אם הגובה של המכשיר הוא 900 dp אז בעצם אנחנו רוצים איזשהו קובץ אחר עם הגדרות אחרות.
נחזור לאנדרואיד סטודיו תוך שנייה הוא בעצם אומר לנו עכשיו בנוגע לדימנשיונס יש שלושה קבצים אחד דיפולט הוא נמצא בתיקיית values as is כמו שהיא אחד נמצא בתיקיה שנקראת VALUES/H 900DP ואחד נמצא בתיקיה שנקראת VALUES/W 700DP. בואו רגע ניפטר משתי התיקיות האלה ונראה שיטה אחרת לבצע זאת.
נחזור לאנדרואיד, ניתן לו את השנייה שלו לרפרש ואנחנו רואים שיש לנו רק תיקיית VALUES. כעת מה שאנחנו יכולים לעשות זה לעשות את זה בשיטה קצת אחרת, ללכת לתיקיית ה-RESOURCES מתוך האנדרואיד סטודיו, ניו ולבחור באנדרואיד ריסורס דירקטורי כאן אנחנו יכולים לבחור את סוג התיקייה הנה אנחנו רואים פה
את values כאן למעלה יש לנו את הדרובול שהתעסקנו איתה וכל תיקייה אחרת שאנחנו בעצם יכולים להגדיר בתוך ה-resources בואו נישאר עם values ופה למטה בצד שמאל אנחנו רואים את ה-available qualifiers שדיברנו עליהם כאן אנחנו בעצם רואים את כל האפשרויות של המצבים
או ההגדרות השונות של אנדרואיד שאנחנו יכולים להשתמש בהם עבור התיקייה שאנחנו בוחרים פה. אז אם בחרנו את values אנחנו יכולים להגיד אוקיי אנחנו רוצים qualifier עבור screenread ורוחב המכשיר כל מה שאנחנו צריכים לעשות זה ללחוץ כאן על השני חצים האלה ואז להגיד כמה qualifier שאנחנו רוצים.
לדוגמה בואו ניתן לו 600 ושימו לב פה למעלה מה השם שהוא אומר לנו שהוא הולך לעשות בעקבות זה. בגלל שבחרנו screen with ובגלל שנתנו 600 אז אוטומטית הוא יודע בגלל שגם פה יש values ששם התיקייה חייב להיות values ==w600dp ==. כל מה שאנחנו צריכים לעשות זה אוקיי אנחנו עדיין לא רואים את זה פה מפני שאין
בתיקייה הזאת שום קובץ. אנחנו יכולים לגשת לסייר הקבצים ולראות שהתיקייה התווספה היא כמובן ריקה. אנחנו יכולים לגשת ופשוט להעתיק לתוך הקבצים, אם אני אקח את הדימנס ואני אגש ופשוט יעתיק אותו ויחזור לתוך אנדרואיד, אז כאן אנחנו כבר כן
נראה שיש לנו שני קבצים. בואו נחזור וניפטר מהקובץ הזה, delete, חזור לאנדרואיד סטודיו, נראה שיש לנו רק את הדיפולט ונעשה את זה בשיטה קצת יותר נכונה.
אנחנו יכולים לגשת כאן לתיקיית ה-values, קאשימני add value resource file ופה אנחנו יכולים לבחור את ה-directory וה-values ולהחליט איך בעצם זה הולך להיקרא.
השם חייב להיות אותו השם כל הזמן בכל התיקיות השונות, לדוגמה diamonds אז בואו ניתן לו diamonds. פה אנחנו שוב פעם בוחרים את ה-qualifier אנחנו רוצים לעשות את זה לפי הסקרין וויד ואנחנו רוצים שזה יהיה בתיקיית ה-600 dp k והנה אנחנו רואים שהוא הוסיף לנו את זה בדיוק למקום הנכון ואנחנו רואים שהקובץ הזה נמצא כאן כעת default יכיל לנו
את מה שתמיד היה והקובץ החדש יהיה ריק ואנחנו יכולים למלא אותו איך שאנחנו רוצים אז יש לנו כרגע אפשרות פשוט להגדיר את ה-qualifiers הנכונים ולשים בתוכם את הקבצים אחרי שעשינו את זה בואו נראה מה זה אומר ואיך אנחנו יכולים באמת לראות משהו שהוא שונה בין הגדרות שונות של מכשירים.
אז הדבר הראשון שאנחנו הולכים לעשות זה להציג על גבי המכשיר את הרוחב והגובה שלו ב-DP בכדי לראות מתי ההגדרות האלה שאנחנו הגדרנו פה נכנסות לתוקף.
אז יש לנו כאן צורך בטקסט view, נגדיר ראפ קונטנט, ניתן לו ID, טקסט, view, dimensions, טקסט סייז, 20, אנחנו יכולים לגשת Java, פריווט, טקסט, view,
תתיר אותו פה, mind view by ID, הנה הוא, וכעת אנחנו יכולים להכניס לתוכו את הממדים הנוכחיים של המכשיר.
זה יתבצע על ידי DisplayMetrics שראינו בעבר, הנה ה-DisplayMetrics, ריסורסס גט דיספליי מטריקס, מטריקס זה בעצם מידע לגבי מימדים יש לנו כאן צורך למצוא את הוויד ב-DP בואו ניקח את דיספליי מטריקס ויש לנו וויד בפיקסלים זה הדבר היחידי שהוא נותן לנו אבל אנחנו יכולים לחלק אותו בדנסיטי ובצורה כזאת לקבל את הרוחב ב-DP
אינדיפנדנט פיקסלס זה מה שמעניין אותנו כרגע בואו רק נעשה טאסטינג לאינטג'ר נשכפל הכל dp יהיה פיקסלס לחלק לדנסיטי בואו ניקח כאן איזשהו סטרינג וניתן לו וויב נשרשר את הוויב בdp עם הסיומת הdp נראית שורה הייט
נשרשר את ההייט בדפי עם הסיומת dp ניגש טקסט view שלנו ונכניס את ה-dimensions לתוך הטקסט view. בואו נריץ ואנחנו הולכים לראות את ההרצה גם על האמולטור וגם על מכשיר אמיתי ומה שאנחנו הולכים לראות זה שבאמולטור הרוחב מוגדר כ-360 dp והגובה כ-592 dp במכשיר האמיתי הרוחב הוא 600 dp יותר רחב והגובה ו-976 dp, אוקיי.
אז עכשיו אחרי שאנחנו ממש רואים שני מכשירים שונים ואנחנו רואים שני מימדים שונים של רוחב, אנחנו יכולים לחזור ולבצע בזה שימוש. אז בואו נלגש ל-dimens הדיפולטי, ניפטר מכל מה שיש כאן ונגדיר דימן ונגדיר לו left margin.
בדיפולט נגדיר שאנחנו רוצים נניח 5 dp כ-left מרג'ין. ניקח את ההגדרה הזאת, ניגש ל-covets השני, ולפעם נגדיר מי ה-dp.
עכשיו, כל מה שאנחנו צריכים לעשות זה פשוט להשתמש בהגדרה left מרג'ין. בואו ניגש ל-main activity ופשוט ניגש ל-text view לדוגמה וניתן לו מרג'ין left ואנחנו הולכים ל-domain והולכים ל-left מרג'ין.
כאן יש לנו הגדרה אחת ויחידה. אין לנו שתי הגדרות כאשר אנחנו משתמשים בזה. המכשיר עצמו הנוכחי של היוזר יבדוק מה בעצם מתאים ולפי זה ייקח. אם רוחב המכשיר של היוזר הנוכחי שמריץ את האפליקציה שלנו הוא 600 dp ומעלה, זה מה שיילקח.
אם רוחב המכשיר שלו לא עונה על הדרישה הזאת, זה מה שיילקח. לדיפולט. אז בואו ניגש ושוב פעם נריץ את שני המכשירים.
אז הנה אנחנו רואים שזה רץ ובמכשיר האמולטור בעצם אנחנו יכולים לראות שהלפט מרג'ין הוא רק 5 dp למעשה מה שאנחנו רואים פה זה 21 dp שזה ה-16 dps הרגילים פלוס ה-5 של הלפט מרג'ינג של הטקסט view ואם אנחנו מסתכלים על המכשיר האמיתי אנחנו רואים באמת שיש פה מרווח יותר רציני של 100 dp או 116 ליתר דיוק מפני
שהרוחב שלו הוא 600 dp ולכן הוא עונה על ה-Qualifier. בואו נראה איך זה ניתן לביצוע עבור קובץ ריסורס נוסף.
אז יש לנו פה את ה-Colors אז אנחנו יכולים לגשת ולהוסיף values resource file להגדיר שאנחנו רוצים colors אנחנו רוצים גם כן screen-web 600k והולך להיות לנו פה שני קבוצים color סטנדרטי ו-color נוסף עבור רוחב שהוא 600dp ומעלה.
אז קודם כל בואו ניגש ל-color הסטנדרטי ונוסיף עוד color ונקרא לו activity-background וניתן לו פה איזשהו צבע ניגש נבחר איזשהו צבע והוא ה-activity זה, ועכשיו ניקח את כל התוכן של הקובץ הזה, ctrl-c ניגש לקובץ החדש, ctrl-v ופשוט נשנה רק את