המשאבים הם הקבצים הנוספים והתוכן הסטטי שבהם הקוד משתמש, כמו מפות סיביות, פריסה הגדרות, מחרוזות ממשק משתמש, הוראות לאנימציה ועוד.
תמיד צריך להוציא את המשאבים של האפליקציה, כמו תמונות ומחרוזות, כדי לנהל אותם באופן עצמאי. כמו כן, לספק מקורות מידע חלופיים תצורות ספציפיות של מכשירים על ידי קיבוץ שלהם בספריות משאבים בעלות שם ייחודי. בשעה בזמן הריצה, Android משתמש במשאב המתאים בהתאם להגדרה הנוכחית. עבור לדוגמה, ייתכן שתרצו לספק פריסה שונה של ממשק המשתמש, בהתאם לגודל המסך או מחרוזות, בהתאם להגדרת השפה.
אחרי הוצאת המשאבים של האפליקציה באופן חיצוני, אפשר לגשת אליהם
באמצעות מזהי המשאבים שנוצרים במחלקה R
של הפרויקט.
במסמך הזה נסביר איך לקבץ את המשאבים בפרויקט Android. הוא גם מראה איך
כדי לספק משאבים חלופיים לתצורות מכשירים ספציפיות ואז לגשת אליהם
בקוד האפליקציה או בקובצי XML אחרים.
סוגי המשאבים של הקבוצה
מציבים כל סוג משאב בספריית משנה ספציפית של הפרויקט
ספריית res/
. לדוגמה, כך היררכיית הקבצים בפרויקט פשוט:
MyProject/ src/ MyActivity.java res/ drawable/ graphic.png layout/ main.xml info.xml mipmap/ icon.png values/ strings.xml
הספרייה res/
מכילה את כל המשאבים
ספריות משנה: משאב תמונה, שני משאבי פריסה, ספריית mipmap/
למרכז האפליקציות
וקובץ משאב מסוג מחרוזת. מקור המידע
שמות הספריות חשובים והם מתוארים בטבלה 1.
הערה: מידע נוסף על השימוש בתיקיות ה-mipmap זמין במאמר להציב סמלי אפליקציות בספריות של מיפוי במפה.
ספרייה | סוג משאב |
---|---|
animator/ |
קובצי XML שמגדירים נכס אנימציות. |
anim/ |
קובצי XML שמגדירים מצב טרום-עשרה
אנימציות. אפשר לשמור בספרייה הזו גם אנימציות של נכסים, אבל
עדיפה הספרייה animator/ לאנימציות של מאפיינים כדי להבחין בין שני המאפיינים
שונים. |
color/ |
קובצי XML שמגדירים רשימת מצב של צבעים. אפשר לקרוא מידע נוסף במאמר בנושא צבע רשימת המצבים האפשריים. |
drawable/ |
קובצי Bitmap,
אפשר לקרוא מידע נוסף בקטע משאבים ניתנים לשרטוט. |
mipmap/ |
קבצים ניתנים לציור לדחיסות שונות של סמל מרכז האפליקציות. מידע נוסף על ניהול
סמלי מרכז האפליקציות עם mipmap/ תיקיות. אפשר לראות
הוספת סמלי אפליקציות
ספריות Mipmap. |
layout/ |
קובצי XML שמגדירים את הפריסה של ממשק המשתמש. אפשר לקרוא מידע נוסף במשאב הפריסה. |
menu/ |
קובצי XML שמגדירים תפריטי אפליקציות, כמו תפריט אפשרויות, תפריט הקשר או תפריט משנה. תוכלו לקרוא מידע נוסף בקטע משאב תפריט. |
raw/ |
קבצים שרירותיים לשמירה בצורתם הגולמית. כדי לפתוח את המשאבים האלה באמצעות קובץ RAW
עם זאת, אם אתם צריכים גישה לשמות הקבצים המקוריים ולהיררכיית הקבצים, כדאי לבדוק
שמירת משאבים בספרייה |
values/ |
קובצי XML שמכילים ערכים פשוטים, כמו מחרוזות, מספרים שלמים וצבעים. קובצי משאבי XML בספריות משנה אחרות ב- מכיוון שכל משאב מוגדר עם רכיב XML משלו, אפשר לתת שם לקובץ כל מה שתרצו והציבו סוגי משאבים שונים בקובץ אחד. עם זאת, לשם הבהרה, כדאי שרוצים למקם סוגי משאבים ייחודיים בקבצים שונים. לדוגמה, הנה כמה שמות קבצים מוסכמות לגבי משאבים שאפשר ליצור בספרייה הזו:
למידע נוסף אפשר לעיין במאמר משאבי מחרוזות. משאב סגנון, וגם סוגי משאבים נוספים. |
xml/ |
קובצי XML שרירותיים שאפשר לקרוא אותם בזמן ריצה באמצעות קריאה ל-Resources.getXML() . קובצי תצורת XML שונים
צריך לשמור אותו כאן, למשל הגדרות חיפוש.
|
font/ |
קובצי גופנים עם סיומות כמו TTF, OTF
או קובצי XML,
כוללים רכיב <font-family> . מידע נוסף על
גופנים בתור משאבים,
הוספת גופן כמשאב XML.
|
זהירות: אף פעם אל תשמרו קובצי משאבים ישירות בתוך
ספריית res/
. הוא גורם לשגיאת מהדר.
כדי לקבל מידע נוסף על כל סוג של משאבים, אפשר לעיין במאמר סקירה כללית של סוגי משאבים.
המשאבים שאתם שומרים בספריות המשנה ומוגדרים בטבלה 1 מוגדרים כברירת מחדל. במשאבי אנוש. כלומר המשאבים האלה מגדירים את עיצוב ברירת המחדל והתוכן של האפליקציה. עם זאת, סוגים שונים של מכשירים מבוססי Android עשויים לדרוש סוגים שונים של משאבים.
לדוגמה, תוכלו לספק משאבי פריסה שונים למכשירים שהם גדולים מהרגיל מסכים כדי לנצל את השטח הנוסף במסך. אפשר גם לספק משאבי מחרוזות שונים שיתרגמו את הטקסט בממשק המשתמש על סמך הגדרת השפה של המכשיר. כדי לספק את המשאבים השונים האלה למכשירים שונים צריך לספק משאבים חלופיים בנוסף לברירת המחדל במשאבי אנוש.
מתן מקורות מידע חלופיים
רוב האפליקציות מספקות משאבים חלופיים לתמיכה במכשיר ספציפי הגדרות אישיות. לדוגמה, אפשר לכלול משאבים שניתנים להזזה חלופיים דחיסות מסך ומשאבים חלופיים למחרוזות לשפות שונות. בזמן הריצה, Android מזהה את תצורת המכשיר הנוכחית וטוען את משאבים לאפליקציה.
כדי לציין חלופות ספציפיות להגדרות אישיות לקבוצת משאבים, צריך לבצע את הפעולות הבאות:
- יצירת ספרייה חדשה ב-
res/
ששמה מופיע בטופס<resources_name>-<qualifier>
.<resources_name>
הוא שם הספרייה של ברירת המחדל המתאימה משאבים (מוגדרים בטבלה 1).<qualifier>
הוא שם שמציין הגדרה אישית מסוימת שעבורם רוצים להשתמש במשאבים האלה (מוגדר בטבלה 2).
אפשר לצרף יותר ממחרוזת
<qualifier>
אחת. הפרדה אחד עם מקף.זהירות: כשמצרפים מספר ערכים מזהים, צריך ומציבים אותן לפי אותו סדר שבו הן מופיעות בטבלה 2. אם ערכי השוויון מסודרים באופן שגוי, המערכת מתעלמת מהמשאבים.
- שומרים את המשאבים החלופיים המתאימים בספרייה החדשה. קובצי המשאבים חייבים להיות שהשם יהיה זהה לגמרי לקובצי ברירת המחדל של המשאבים.
לדוגמה, ריכזנו כאן כמה מקורות מידע ומשאבים חלופיים כברירת מחדל:
res/ drawable/ icon.png background.png drawable-hdpi/ icon.png background.png
ערך האישור hdpi
מציין שהמשאבים בספרייה הזו מיועדים למכשירים עם
מסך עם צפיפות גבוהה. התמונות בספריות שניתנות להזזה אלה מותאמות לגודל
דחיסות המסך, אבל שמות הקבצים זהים
כמעט זהים. כך, מזהה המשאב שבו משתמשים כדי להפנות אל icon.png
או
התמונה background.png
תמיד זהה. Android בוחר את
של כל משאב המתאים ביותר למכשיר הנוכחי, על ידי השוואת המכשיר
את ההגדרות האישיות עם המפרידים בשם ספריית המשאבים.
זהירות: כשמגדירים משאב חלופי, צריך להקפיד
להגדיר גם את המשאב בהגדרות ברירת המחדל. אחרת, האפליקציה עשויה להיתקל בזמן ריצה
חריגים כשהמכשיר משנה הגדרה אישית. לדוגמה, אם תוסיפו מחרוזת רק
values-en
ולא values
, האפליקציה עלולה להיתקל ב
חריג Resource Not Found
כאשר המשתמש משנה את שפת ברירת המחדל של המערכת.
טבלה 2 מפרטת את מגדירי ההגדרות החוקיים לפי סדר הקדימות. אפשר להוסיף מספר מגדירים לשם ספרייה אחד על ידי הפרדה בין כל תוחם באמצעות מקף. אם משתמשים מספר מגדירים לספריית משאבים, צריך להוסיף אותם לשם הספרייה לפי הסדר מפורטים בטבלה.
הגדרות אישיות | ערכי מגדיר | תיאור |
---|---|---|
חשבון ניהול (MCC) ו-MNC | דוגמאות:mcc310
mcc208-mnc00
|
קוד המדינה לנייד (MCC), אופציונלי ואחריו הקוד של הרשת הסלולרית (MNC)
מכרטיס ה-SIM שבמכשיר. לדוגמה, הכתובת אם המכשיר משתמש בחיבור רדיו (כלומר, זהו טלפון GSM), ערכי MCC ו-MNC מגיעים מכרטיס ה-SIM. אפשר גם להשתמש בחשבון הניהול (MCC) בלבד, למשל כדי לכלול מידע משפטי ספציפי למדינה משאבים באפליקציה. אם עליך לציין רק לפי השפה, אפשר להשתמש במקום זאת, מזינים את המפריד language, script (אופציונלי) ואזור (אופציונלי). אם אתם משתמשים בחשבון ניהול (MCC) תוחם MNC, יש לעשות זאת בזהירות ולבדוק שהוא פועל כצפוי. צריך לעיין גם בשדות ההגדרה |
שפה, סקריפט (אופציונלי) ואזור (אופציונלי) | דוגמאות:en fr en-rUS fr-rFR fr-rCA b+en b+en+US b+es+419 b+zh+Hant b+sr+Latn+RS |
השפה מוגדרת באמצעות קוד שפה בן שתי אותיות לפי תקן ISO 639-1, ואחריו יש אפשרות לשים לב
באמצעות קוד אזור בן שתי אותיות לפי תקן ISO 3166-1-alpha-2 (הקודם
הקודים לא תלויי אותיות רישיות (case-sensitive). הקידומת ב-Android 7.0 (רמת API 24) נוספה תמיכה ב- BCP 47 של השפות, שבהם אפשר להשתמש משאבים ספציפיים לאזור. תג שפה מורכב מרצף של תג משנה אחד או יותר, שכל אחד מהם מצמצם או מצמצם את הטווח השפה המזוהה על ידי התג הכולל. מידע נוסף על את תגי השפה, ראו תגים לזיהוי שפות. כדי להשתמש בתג שפה BCP 47, צריך לשרשר את
תג השפה עשוי להשתנות במהלך חיי האפליקציה, אם שהמשתמשים משנים את השפה שלהם בהגדרות המערכת. מידע על איך השינוי יכול להשפיע על האפליקציה שלך במהלך זמן הריצה, אפשר לעיין בכינוי שינויים בתצורה. מדריך מלא להתאמת האפליקציה לשפות אחרות זמין במאמר התאמה של האפליקציה לשוק המקומי. כדאי לעיין גם בשיטה |
כיוון הפריסה | ldrtl ldltr |
כיוון הפריסה של האפליקציה. המשמעות של האפשרות הזו יכולה לחול על כל משאב, כמו תבניות, פריטים גרפיים או ערכים. לדוגמה, אם רוצים לספק פריסה ספציפית עבור השפה הערבית פריסה כללית אחרת מימין לשמאל כמו פרסית בעברית, משתמשים בספריות כמו:
הערה: כדי להפעיל תכונות של פריסה מימין לשמאל
באפליקציה, צריך להגדיר את נוסף ברמת API 17. |
הרוחב הקטן ביותר | sw<N>dp דוגמאות: sw320dp sw600dp
sw720dp וכו' |
המאפיין הקצר ביותר של אזור המסך שזמין לאפליקציה.
באופן ספציפי, השדה
לדוגמה, אם הפריסה דורשת את המידות הקטנה ביותר של המסך
להיות לפחות 600 dp כל הזמן, תוכל להשתמש בערך הזה כדי
ליצור את משאבי הפריסה בספרייה שימוש ברוחב הקטן ביותר כדי לקבוע את גודל מסך כללי שימושי, כי הרוחב הוא בדרך כלל הגורם המניע על עיצוב הפריסה. בדרך כלל, בממשק המשתמש מתבצעת גלילה אנכית, אבל התהליך די קשה מגבלות על השטח המינימלי הדרוש באופן אופקי. הרוחב הזמין הוא גם הגורם המרכזי בהחלטה אם להשתמש בפריסה של חלונית אחת טלפונים ניידים או פריסת חלונית משולבת לטאבלטים. לכן, סביר להניח שהכי חשוב לכם מהו הרוחב הקטן ביותר האפשרי בכל מכשיר. ברוחב הקטן ביותר של המכשיר נלקחים בחשבון קישוטי מסך ממשק המשתמש של המערכת. לדוגמה, אם למכשיר יש רכיבי ממשק משתמש קבועים מסך שמביא בחשבון שטח לאורך הציר ברוחב הקטן ביותר, המערכת מצהיר שהרוחב הקטן ביותר יהיה קטן יותר מגודל המסך בפועל, כי אלו הם פיקסלים של מסך שלא זמינים בממשק המשתמש שלך. הנה כמה ערכים שאפשר להשתמש בהם כאן לגדלים נפוצים של מסכים:
כשהאפליקציה מספקת כמה ספריות משאבים עם ערכים שונים
ערך האישור נוסף ברמת API 13. מומלץ לעיין גם ב למידע נוסף על עיצוב למסכים שונים באמצעות תו האישור הזה, ראו עיצוב רספונסיבי/דינמי עם תצוגות. |
רוחב וגובה זמינים | w<N>dp h<N>dp דוגמאות: w720dp
w1024dp h720dp
h1024dp וכו' |
ציון הרוחב או הגובה המינימלי של המסך (ב- הרוחב והגובה הזמינים הם בדרך כלל שימושיים כדי לקבוע אם להשתמש בריבוי חלוניות כי גם בטאבלט, במקרים רבים לא רוצים את אותה פריסת חלוניות מרובות לתצוגה לאורך כמו לרוחב. לכן אפשר להשתמש בהם כדי לציין רוחב ו/או גובה מינימליים הנדרשים לפריסה, במקום להשתמש גם בגודל המסך יחד של מגדיר הכיוון. כשהאפליקציה מספקת כמה ספריות משאבים עם ערכים שונים בתצורות אלה, המערכת משתמשת בתצורה הקרובה ביותר לתצורות אלה (מבלי לחרוג מ-) רוחב המסך הנוכחי של המכשיר. כדי לקבוע את הערך הקרוב ביותר, צריך להוסיף את ההבדלים בין רוחב המסך בפועל לרוחב שצוין, לבין ההפרש בין גובה המסך בפועל והגובה שצוין, עם גבהים ורוחב שלא צוינו שהערך שלו הוא 0. הערכים לא כוללים את האזור שבו נמצא
כניסות לחלון, כך שאם במכשיר
רכיבי ממשק משתמש קבועים בקצוות של המסך, ערכי הרוחב והגובה
קטן יותר ממידות המסך האמיתי, גם כשהאפליקציה מוצגת מקצה לקצה
באמצעות
עיטורים אנכיים של המסך שאינם קבועים (כמו טלפון שורת סטטוס שאפשר להסתיר כשנמצאים במסך מלא) לא נכללת כאן, וגם הם קישוטים לחלון כמו סרגל הכותרת או סרגל הפעולות, כך שהאפליקציות צריכות להיות מוכנות למצב עם שטח קצת יותר קטן ממה שהם מציינים. הערה: המערכת בוחרת את המשאב שתואם לשני הסוגים ב- רוחב וגובה. לכן עדיף להשתמש במשאב שמציין את שניהם שמציין רק אחד מהשניים. לדוגמה, אם המסך בפועל הוא ברוחב של 720dp משאב גבוה של 1280dp ומשאב אחד כשיר ל-w720dp ומשאב אחר כשיר w700dp-h1200dp, האפשרות השנייה נבחרה על אף שהראשון הוא התאמה מדויקת הוא מציין. נוסף ברמת API 13. ראו גם את למידע נוסף על עיצוב למסכים שונים באמצעות תו האישור הזה, ראו עיצוב רספונסיבי/דינמי עם תצוגות. |
גודל המסך |
small normal large xlarge
|
הערה: שימוש בערך תוחם גודל לא משתמע שהמשאבים רק למסכים בגודל כזה. אם לא לספק משאבים חלופיים עם מגדירים שתואמים למכשיר הנוכחי היא יכולה להשתמש במשאבים שהם הטובים ביותר תואמת. זהירות: אם כל המשאבים שלכם משתמשים בגודל מסוים
שהוא גדול יותר מהמסך הנוכחי, המערכת
לא משתמשת בהם, והאפליקציה קורסת בזמן הריצה. זה קורה, לדוגמה, אם כל הפריסה
משאבים מתויגים באמצעות ערך האישור נוסף ברמת API 4. ראו גם את אפשר לקרוא מידע נוסף בקטע מסך סקירה כללית על התאימות. |
היבט המסך |
long notlong
|
נוסף ברמת API 4. מבוסס רק על יחס הגובה-רוחב של המסך (מסך צריך לעיין גם בשדה ההגדרה של |
מסך עגול |
round notround
|
נוסף ברמת API 23. הצגת ההגדרות האישיות של |
סולם צבעים רחב |
widecg nowidecg
|
נוסף ברמת API 26. הצגת ההגדרות האישיות של |
טווח דינמי גבוה (HDR) |
highdr lowdr
|
נוסף ברמת API 26. הצגת ההגדרות האישיות של |
כיוון המסך |
port land
|
זה יכול להשתנות במהלך חיי האפליקציה אם המשתמש מסובב את מסך. כדי ללמוד איך השינוי משפיע על האפליקציה שלך במהלך זמן ריצה, אפשר לעיין במאמר שינויים בהגדרות הכינוי. צריך לעיין גם בשדה ההגדרה של |
מצב ממשק משתמש |
car desk television appliance watch vrheadset
|
נוסף ברמת API 8; הוספת טלוויזיה ב-API 13; השעון נוסף ב-API 20. למידע על האופן שבו האפליקציה שלך יכולה להגיב כשהמכשיר מוכנס לתוך או שהוסרו מ-Dock, קוראים את המאמר זיהוי ומעקב אחר מצב וסוג העגינה זה יכול להשתנות במהלך חיי האפליקציה אם המשתמש מציב את המכשיר
לקבע. אפשר להפעיל או להשבית חלק מהמצבים האלה באמצעות
|
מצב לילה |
night notnight
|
נוסף ברמת API 8. האפשרות הזו עשויה להשתנות במהלך חיי האפליקציה אם משאירים את מצב לילה
המצב האוטומטי (ברירת המחדל), במקרה כזה, המצב משתנה בהתאם לשעה ביום. אפשר להפעיל
או להשבית את המצב הזה באמצעות |
דחיסות פיקסלים במסך (dpi) |
ldpi mdpi hdpi xhdpi xxhdpi xxxhdpi nodpi tvdpi anydpi nnndpi
|
יש יחס התאמה לעומס (scaling) של 3:4:6:8:12:16 בין שש צפיפות הצפיפות הראשית (התעלמות מה צפיפות tvdpi). כך, מפת סיביות של 9x9 ב-ldpi היא 12x12 ב-mdpi, 18x18 ב-hdpi, 24x24 ב-xhdpi, וכן הלאה. הערה: השימוש בערך צפיפות לא מרמז על כך משאבים מיועדים רק למסכים בצפיפות זו. אם לא מספקים משאבים עם מגדירים שתואמים בצורה טובה יותר לתצורת המכשיר הנוכחית, המערכת משתמשת מקורות המידע המתאימים ביותר. לקבלת מידע נוסף על הטיפול בדחיסות מסך שונה ועל האופן שבו מערכת Android עשויה לשנות את גודל מפות הביטים כדי להתאים לצפיפות הנוכחית, סקירה כללית על תאימות המסך |
סוג מסך המגע |
notouch finger
|
צריך לעיין גם בשדה ההגדרה של |
זמינות המקלדת |
keysexposed keyshidden keyssoft
|
אם סיפקת המצב הזה יכול להשתנות במהלך חיי האפליקציה אם המשתמש פותח חומרה. במקלדת. כדי ללמוד איך השינוי משפיע על האפליקציה שלך במהלך זמן ריצה, אפשר לעיין במאמר שינויים בהגדרות הכינוי. יש לעיין גם בשדות ההגדרה |
שיטת קלט טקסט ראשית |
nokeys qwerty 12key
|
צריך לעיין גם בשדה ההגדרה של |
הזמינות של מקש הניווט |
navexposed navhidden
|
המידע הזה יכול להשתנות במהלך חיי האפליקציה אם המשתמש חושף את הניווט מקשי קיצור. כדי ללמוד איך השינוי משפיע על האפליקציה שלך במהלך זמן ריצה, אפשר לעיין במאמר שינויים בהגדרות הכינוי. הצגת ההגדרות האישיות של |
השיטה הראשית לניווט ללא מגע |
nonav dpad trackball wheel
|
צריך לעיין גם בשדה ההגדרה של |
גרסת פלטפורמה (רמת API) | דוגמאות:v3 v4 v7 וכו' |
רמת ה-API שבה המכשיר תומך. לדוגמה, |
הערה: לא כל הגרסאות של Android תומכות בכל ערכי האישור. שימוש במאפיין חדש באופן מרומז
מוסיף את תוחם גרסת הפלטפורמה כדי שמכשירים ישנים יותר יוכלו להתעלם ממנו. לדוגמה, שימוש ב-
תוחם w600dp
כולל באופן אוטומטי את הערך v13
, כי
תוחם הרוחב הזמין היה חדש ברמת API 13. כדי להימנע מבעיות, מומלץ תמיד לכלול קבוצה של
משאבי ברירת מחדל (קבוצת משאבים ללא מאפיינים). מידע נוסף זמין במאמר
הקטע התאמה הטובה ביותר למכשירים עם
משאבים.
כללים למתן שמות למזהה
הנה כמה כללים לגבי השימוש בשמות של מגדיר התצורה:
- ניתן לציין מספר ערכי אישור לקבוצה אחת של משאבים, ולהפריד ביניהם במקפים. עבור
לדוגמה, המדיניות
drawable-en-rUS-land
חלה על מכשירים באנגלית ארה"ב בפריסה לרוחב לכיוון מסוים. - ערכי ההפרדה חייבים להיות בסדר שמוצג בטבלה 2.
- שגוי:
drawable-hdpi-port/
- נכון:
drawable-port-hdpi/
- שגוי:
- אי אפשר ליצור ספריות משאבים חלופיות כספריות מקוננות. לדוגמה, לא ניתן לכתוב
res/drawable/drawable-en/
- הערכים לא תלויי-רישיות. המהדר של המשאבים ממיר שמות ספריות לאותיות קטנות לפני העיבוד כדי למנוע בעיות הקשורות לאותיות לא תלויות-רישיות. מערכות קבצים. כל שימוש באותיות רישיות בשמות נועד רק לשיפור הקריאוּת.
- יש תמיכה בערך אחד בלבד לכל סוג מזהה. לדוגמה, אם רוצים להשתמש
אותם קבצים ניתנים להזזה לספרד ולצרפת, לא ניתן להשתמש בספרייה בשם
drawable-es-fr/
. במקום זאת, אתם צריכים שתי ספריות משאבים, כמוdrawable-es/
ו-drawable-fr/
, שמכילים את הקבצים המתאימים. עם זאת, לא צריך לשכפל את הקבצים בשני המיקומים בפועל. במקום זאת, יכול ליצור כינוי למשאב, כפי שמתואר במאמר יצירה משאבים חלופיים.
לאחר שמירת משאבים חלופיים בספריות עם שם את המאפיינים האלה, מערכת Android מחילה את המשאבים באפליקציה באופן אוטומטי בהתאם ההגדרות האישיות הנוכחיות של המכשיר. בכל פעם שנשלחת בקשה למשאב, מערכת Android בודקת אם יש מקור חלופי את ספריות המשאבים שמכילות את קובץ המשאב המבוקש, ואז מוצאת את את מקור המידע המתאים ביותר.
אם אין מקורות מידע חלופיים שתואמים לחיפוש בתצורה מסוימת של המכשיר, מערכת Android משתמשת במשאבי ברירת המחדל המתאימים – קבוצת משאבים לסוג משאב מסוים שלא כולל הגדרות אישיות מגדיר.
יצירת משאבים חלופיים
כשיש משאב שאתם רוצים להשתמש בו בכמה מכשירים אבל לא רוצים לספק אותו כמשאב ברירת מחדל, אין צורך להוסיף אותו ביותר מספריית משאבים חלופית אחת. במקום זאת, אפשר ליצור חלופה משאב שמשמש ככינוי של משאב שנשמר בספריית המשאבים המוגדרת כברירת מחדל.
הערה: לא כל המשאבים מציעים מנגנון שמאפשר
ליצור כינוי למשאב אחר. בפרט, אנימציה, תפריט, RAW ואחרים שלא צוינו
המשאבים בספרייה xml/
לא מציעים את התכונה הזו.
לדוגמה, נניח שיש לך סמל אפליקציה, icon.png
, ואתה זקוק לגרסה ייחודית של
אותו ללוקאלים שונים. עם זאת, שני לוקאלים, אנגלית-קנדית וצרפתית-קנדית,
משתמשים באותה גרסה. אין צורך להעתיק את אותה התמונה
במאגר המשאבים גם באנגלית-קנדית וגם בצרפתית-קנדית.
במקום זאת, אפשר לשמור את התמונה שמשמשת גם לכל שם שאינו
icon.png
, כמו icon_ca.png
, ו-put
אותו בספריית ברירת המחדל res/drawable/
. לאחר מכן יוצרים קובץ icon.xml
ב-res/drawable-en-rCA/
וב-res/drawable-fr-rCA/
שמפנה אל icon_ca.png
באמצעות הרכיב <bitmap>
. כך ניתן לאחסן רק גרסה אחת של
קובץ PNG ושני קובצי XML קטנים שמצביעים אליו. ראו את הדוגמאות בקטעים הבאים.
לקבלת פרטים.
ניתן להזזה
כדי ליצור כינוי למכשיר קיים להזזה, צריך להשתמש ברכיב <drawable>
:
<?xml version="1.0" encoding="utf-8"?> <resources> <drawable name="icon">@drawable/icon_ca</drawable> </resources>
אם יש לך אפשרות לשמור את הקובץ הזה כ-icon.xml
במקום אחר
הוא עבר הידור של ספריית המשאבים, כמו res/values-en-rCA/
.
למשאב שאפשר להפנות אליו בתור R.drawable.icon
, אבל
למעשה כינוי למשאב R.drawable.icon_ca
,
נשמרה ברשימה res/drawable/
.
פריסה
כדי ליצור כינוי לפריסה קיימת, צריך להשתמש ב-<include>
רכיב, מוקף ב-<merge>
:
<?xml version="1.0" encoding="utf-8"?> <merge> <include layout="@layout/main_ltr"/> </merge>
אם הקובץ הזה יישמר בתור main.xml
, הוא יעובד למשאב שאפשר להפנות אליו
בתור R.layout.main
, אבל הוא למעשה כינוי של R.layout.main_ltr
משאב.
מחרוזות וערכים פשוטים אחרים
כדי ליצור כינוי למחרוזת קיימת, משתמשים במזהה המשאב של מחרוזת בתור הערך של המחרוזת החדשה:
<?xml version="1.0" encoding="utf-8"?> <resources> <string name="hello">Hello</string> <string name="hi">@string/hello</string> </resources>
המשאב R.string.hi
הוא עכשיו כינוי של R.string.hello
.
ערכים פשוטים אחרים פועלים באותה דרך, למשל צבעים:
<?xml version="1.0" encoding="utf-8"?> <resources> <color name="red">#f00</color> <color name="highlight">@color/red</color> </resources>
גישה למשאבי האפליקציה
אחרי שמספקים משאב באפליקציה, אפשר להחיל אותו על ידי:
שמפנה למזהה המשאב שלו. כל מזהי המשאבים מוגדרים במחלקה R
של הפרויקט,
הכלי aapt
יוצר באופן אוטומטי.
כשהאפליקציה עוברת הידור, aapt
יוצר את המחלקה R
, שמכילה
מזהי המשאבים של כל המשאבים בספרייה res/
. לכל סוג משאב,
יש תת-מחלקה R
, כמו
R.drawable
לכל המשאבים שניתנים להזזה. לכל משאב מהסוג הזה יש
מספר שלם סטטי, למשל R.drawable.icon
. המספר השלם הזה הוא מזהה המשאב שבו אפשר להשתמש
כדי לאחזר את המשאב.
המחלקה R
היא המקום שבו צוינו מזהי המשאבים, אבל לא צריך
היכנסו לשם כדי לגלות מזהה משאב. מזהה משאב תמיד מורכב מהפרטים הבאים:
- סוג המשאב: כל משאב מקובץ ל"סוג", כמו
string
,drawable
ו-layout
. אפשר לקרוא מידע נוסף על הסוגים השונים במאמר סקירה כללית של סוגי המשאבים. - שם המשאב, שהוא שם הקובץ
לא כולל את התוסף או את הערך במאפיין XML
android:name
, אם הוא ערך פשוט, כמו מחרוזת.
יש שתי דרכים לגשת למשאב:
- בקוד: משתמש במספר שלם סטטי ממחלקה משנית של
R
class, כמו:R.string.hello
string
הוא סוג המשאב ו-hello
הוא שם המשאב. יש הרבה ממשקי API של Android שיכולים לגשת למשאבים שלכם כשמציינים מזהה משאב בפורמט הזה. לקבלת מידע נוסף מידע נוסף ראה את הקטע גישה למשאבים בקוד. - ב-XML: באמצעות תחביר XML מיוחד שתואם
מזהה המשאב שהוגדר במחלקה
R
, למשל:@string/hello
string
הוא סוג המשאב ו-hello
הוא שם המשאב. אפשר להשתמש במשאב XML בכל מקום שבו צפוי ערך שתספקו במשאב. לקבלת מידע נוסף מידע נוסף זמין בקטע גישה למשאבים מ-XML.
גישה למשאבים בקוד
כדי להשתמש במשאב בקוד, תוכלו להעביר את מזהה המשאב כפרמטר של שיטה. עבור
לדוגמה, אפשר להגדיר ש-ImageView
ישתמש בפונקציה res/drawable/myimage.png
משאב שמשתמש ב-setImageResource()
:
Kotlin
val imageView = findViewById(R.id.myimageview) as ImageView imageView.setImageResource(R.drawable.myimage)
Java
ImageView imageView = (ImageView) findViewById(R.id.myimageview); imageView.setImageResource(R.drawable.myimage);
אפשר גם לאחזר משאבים בודדים באמצעות methods ב-Resources
, שבהן אפשר לקבל מופע של
עם getResources()
.
תחביר
זהו התחביר להפניה למשאב בקוד:
[<package_name>.]R.<resource_type>.<resource_name>
<package_name>
הוא שם החבילה שבה המשאב נמצא (לא שנדרשים כשאתם מפנים למשאבים מהחבילה שלכם).<resource_type>
הוא מחלקה המשנהR
של סוג המשאב.<resource_name>
הוא שם הקובץ של המשאב ללא סיומת או ערך מאפייןandroid:name
ברכיב ה-XML, בערכים פשוטים.
עבור כדי לקבל מידע נוסף על כל סוגי משאבים ואיך להפנות אליהם, ראו סקירה כללית של סוגי משאבים.
תרחישים לדוגמה
יש הרבה שיטות שמקבלות פרמטר של מזהה משאב, ואפשר לאחזר משאבים באמצעות
ב-Resources
. שלך
יכול לקבל מופע של Resources
באמצעות Context.getResources()
.
הנה כמה דוגמאות לגישה למשאבים בקוד:
Kotlin
// Load a background for the current screen from a drawable resource. window.setBackgroundDrawableResource(R.drawable.my_background_image) // Set the Activity title by getting a string from the Resources object, because // this method requires a CharSequence rather than a resource ID. window.setTitle(resources.getText(R.string.main_title)) // Load a custom layout for the current screen. setContentView(R.layout.main_screen) // Set a slide in animation by getting an Animation from the Resources object. flipper.setInAnimation(AnimationUtils.loadAnimation(this, R.anim.hyperspace_in)) // Set the text on a TextView object using a resource ID. val msgTextView = findViewById(R.id.msg) as TextView msgTextView.setText(R.string.hello_message)
Java
// Load a background for the current screen from a drawable resource. getWindow().setBackgroundDrawableResource(R.drawable.my_background_image) ; // Set the Activity title by getting a string from the Resources object, because // this method requires a CharSequence rather than a resource ID. getWindow().setTitle(getResources().getText(R.string.main_title)); // Load a custom layout for the current screen. setContentView(R.layout.main_screen); // Set a slide in animation by getting an Animation from the Resources object. flipper.setInAnimation(AnimationUtils.loadAnimation(this, R.anim.hyperspace_in)); // Set the text on a TextView object using a resource ID. TextView msgTextView = (TextView) findViewById(R.id.msg); msgTextView.setText(R.string.hello_message);
זהירות: אל תשנו את הקובץ R.java
באופן ידני. הוא נוצר על ידי הכלי aapt
כשהפרויקט
שעברה הידור. השינויים יבוטלו בפעם הבאה שתתבצע הידור.
גישה למשאבים מ-XML
אפשר להגדיר ערכים למאפיינים ורכיבים מסוימים של XML באמצעות הפניה למשאב קיים. אתה עושה זאת לעתים קרובות כאשר אתה יוצר קובצי פריסה, כדי לספק מחרוזות ותמונות לווידג'טים.
לדוגמה, אם מוסיפים Button
לפריסה, משתמשים ב-
משאב מחרוזת לטקסט הלחצן:
<Button android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/submit" />
תחביר
זהו התחביר להפניה למשאב במשאב XML:
@[<package_name>:]<resource_type>/<resource_name>
<package_name>
הוא שם החבילה שבה נמצא המשאב (לא שנדרשת כשפונים למשאבים מאותה חבילה).<resource_type>
הוא/היא מחלקה משניתR
לסוג המשאב.<resource_name>
הוא שם הקובץ של המשאב ללא סיומת או ערך מאפייןandroid:name
ברכיב ה-XML, בשביל בערכים פשוטים.
עבור כדי לקבל מידע נוסף על כל סוגי משאבים ואיך להפנות אליהם, ראו סקירה כללית של סוגי משאבים.
תרחישים לדוגמה
במקרים מסוימים, צריך להשתמש במשאב עבור ערך ב-XML, למשל כדי להחיל תמונה שניתן לצייר. לווידג'ט, אבל אפשר להשתמש גם במשאב ב-XML בכל מקום שמקבל ערך פשוט. עבור לדוגמה, אם יש לכם את קובץ המשאבים הבא שכולל משאב צבע ומשאב מחרוזות:
<?xml version="1.0" encoding="utf-8"?> <resources> <color name="opaque_red">#f00</color> <string name="hello">Hello!</string> </resources>
אפשר להשתמש במשאבים האלה בקובץ הפריסה הבא כדי להגדיר את צבע הטקסט מחרוזת טקסט:
<?xml version="1.0" encoding="utf-8"?> <EditText xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:textColor="@color/opaque_red" android:text="@string/hello" />
במקרה כזה, אין צורך לציין את שם החבילה בהפניה למשאב, כי המאפיין המשאבים מגיעים מהחבילה שלכם. שפת תרגום להפנות למשאב מערכת, עליכם לכלול את שם החבילה, כפי שמוצג בדוגמה הבאה:
<?xml version="1.0" encoding="utf-8"?> <EditText xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:textColor="@android:color/secondary_text_dark" android:text="@string/hello" />
הערה: השתמשו תמיד במשאבי מחרוזות, כדי שהאפליקציה תהיה מותאמת לשוק המקומי לשפות אחרות. לקבלת מידע על יצירת חלופה למשאבים (כמו מחרוזות שהותאמו לשוק המקומי), אפשר לעיין בקטע מתן חלופה משאבים. לקבלת המדריך המלא להתאמת האפליקציה לשפות אחרות: ראה לוקליזציה של האפליקציה.
אפשר אפילו להשתמש במשאבים ב-XML כדי ליצור כינויים. לדוגמה, אפשר ליצור משאב שניתן להזזה שהוא כינוי של משאב אחר שניתן להזזה:
<?xml version="1.0" encoding="utf-8"?> <bitmap xmlns:android="http://schemas.android.com/apk/res/android" android:src="@drawable/other_drawable" />
הפעולה הזו נשמעת מיותרת, אבל היא יכולה להיות שימושית מאוד כשמשתמשים במקורות מידע חלופיים. לקבלת מידע נוסף ראו את הקטע בנושא יצירת משאבים חלופיים.
מאפייני סגנון של קובץ עזר
משאב של מאפיין סגנון מאפשר להפנות לערך של מאפיין בעיצוב שהוחל כרגע. הפניה למאפיין סגנון מאפשרת לכם להתאים אישית את המראה של רכיבי ממשק המשתמש על ידי עיצוב שלהם כך שיתאימו לווריאציות הרגילות שזמינות את העיצוב הנוכחי, במקום לספק ערך בתוך הקוד. הפניה למאפיין סגנון בעיקרון, "שימוש בסגנון שמוגדר על ידי המאפיין הזה בעיצוב הנוכחי".
כדי להפנות למאפיין סגנון, התחביר של השם כמעט זהה למשאב הרגיל
אבל במקום התחילית 'at'. (@
), יש להשתמש בסימן שאלה (?
).
החלק של סוג המשאב הוא אופציונלי. לכן, התחביר של ההפניה:
?[<package_name>:][<resource_type>/]<resource_name>
לדוגמה, כך תוכלו להפנות למאפיין כדי להגדיר את צבע הטקסט כך שיתאים הצבע המשני של הטקסט של עיצוב המערכת:
<EditText id="text" android:layout_width="fill_parent" android:layout_height="wrap_content" android:textColor="?android:textColorSecondary" android:text="@string/hello_world" />
כאן, המאפיין android:textColor
מציין את השם של מאפיין סגנון
בעיצוב הנוכחי. מערכת Android משתמשת עכשיו בערך שהוחל על android:textColorSecondary
בתור הערך של android:textColor
בווידג'ט הזה. כי המערכת
שבהקשר הזה נדרש משאב מאפיין,
אתם לא צריכים לציין במפורש את הסוג,
?android:attr/textColorSecondary
אפשר להחריג את הסוג attr
.
גישה לקבצים המקוריים
למרות שהדבר לא נפוץ, ייתכן שתזדקקו לגשת לקבצים ולספריות המקוריים שלכם. אם תעשו זאת,
לא ניתן לשמור את הקבצים ב-res/
מפני שהדרך היחידה לקרוא משאב
res/
עם מזהה המשאב. במקום זאת, תוכלו לשמור את המשאבים שלכם
ספריית assets/
.
קבצים שנשמרו בספרייה assets/
לא מקבלים משאב
מזהה, כך שלא ניתן להפנות אליהם דרך המחלקה R
או ממשאבי XML. במקום זאת, אפשר
קובצי שאילתות בספרייה assets/
כמו במערכת קבצים רגילה, וקוראים נתונים גולמיים באמצעות
AssetManager
.
עם זאת, אם הדבר היחיד שדרוש לך הוא יכולת לקרוא נתונים גולמיים (כמו קובץ וידאו או אודיו),
לאחר מכן שומרים את הקובץ בספרייה res/raw/
וקוראים זרם של בייטים באמצעות openRawResource()
.
משאבי פלטפורמת גישה
ב-Android יש מספר משאבים סטנדרטיים, כמו סגנונות, עיצובים ופריסות. שפת תרגום
לגשת למשאבים האלה, להגדיר את ההפניה למשאבים באמצעות
שם החבילה android
. לדוגמה, Android מספק משאב פריסה שאפשר להשתמש בו
פריטים ב-ListAdapter
:
Kotlin
listAdapter = ArrayAdapter(this, android.R.layout.simple_list_item_1, myarray)
Java
setListAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, myarray));
בדוגמה הזו, simple_list_item_1
הוא משאב פריסה שמוגדר על ידי
פלטפורמה לפריטים ב-ListView
. אפשר להשתמש בה במקום ליצור
פריסה משלך של פריטים ברשימה.
התאימות הטובה ביותר למכשירים עם משאבים
כדי שהאפליקציה שלך תתמוך בכמה תצורות מכשירים, חשוב מאוד אתם תמיד מספקים משאבי ברירת מחדל לכל סוג של משאב שהאפליקציה שלכם משתמשת בו.
לדוגמה, אם האפליקציה תומכת בכמה שפות, צריך לכלול תמיד ספריית values/
(שבה נשמרות המחרוזות) ללא הגדרת שפה ואזור. אם במקום זאת תוסיפו את כל קובצי המחרוזת
בספריות עם תוחם שפה ואזור, האפליקציה קורסת בזמן הריצה
במכשיר שמוגדר לשפה שהמחרוזות שלך לא תומכות בה.
כל עוד מספקים ברירת מחדל
values/
משאבים, אז האפליקציה תפעל באופן תקין, גם אם המשתמש לא פועל
להבין את השפה שהוא מציג. זה עדיף על קריסות.
באופן דומה, אם מספקים משאבי פריסה שונים בהתאם לכיוון המסך,
בוחרים כיוון אחד כברירת המחדל. לדוגמה, במקום לספק משאבי פריסה ב-layout-land/
לרוחב וב-layout-port/
לאורך, צריך להשאיר אחד כברירת המחדל, כמו
layout/
לפורמט לרוחב ו-layout-port/
לפורמט לאורך.
חשוב לספק משאבי ברירת מחדל לא רק מכיוון שהאפליקציה עשויה לפעול אבל גם בגלל שגרסאות חדשות של Android מוסיפות לפעמים מגדירי התצורה שגרסאות ישנות יותר לא תומכות בהם. אם משתמשים במזהה משאבים חדש, אבל לשמור על תאימות הקוד עם גרסאות ישנות יותר של Android, ואז כשגרסה ישנה יותר של מערכת Android מפעילה את האפליקציה. היא קורסת אם לא מספקים משאבי ברירת מחדל, כי לא יכול להשתמש במשאבים שהשם שלהם מכיל את ערך האישור החדש.
לדוגמה: אם הערך בשדה minSdkVersion
הוא 4, וכל המשאבים שניתנים להזזה עומדים בדרישות באמצעות מצב לילה (night
או notnight
, שנוספו דרך API).
רמה 8), אז מכשיר ברמת API 4 לא יכול לגשת למשאבים שניתנים להזזה ולקריסות. כאן
כנראה שתרצו ש-notnight
יהיו משאבי ברירת המחדל שלכם, לכן אל כוללים את
תוחם ולהציב את המשאבים שניתנים להזזה ב-drawable/
או ב-drawable-night/
.
בקיצור, כדי לספק את תאימות המכשיר הטובה ביותר, מומלץ תמיד להשתמש בברירת מחדל למשאבים שהאפליקציה צריכה כדי לפעול באופן תקין. ואז ליצור חלופה משאבים לתצורות מכשירים ספציפיות באמצעות מגדירי תצורה.
לכלל הזה יש חריג אחד: אם הערך של minSdkVersion
באפליקציה הוא 4 או
גדולה יותר, לא צריך משאבים ניתנים להזזה שמוגדרים כברירת מחדל כשמספקים פריטים שניתנים להזזה
משאבים עם תוחם צפיפות המסך. גם בלי ברירת המחדל
משאבים שניתנים להזזה, Android יכול למצוא את ההתאמה הטובה ביותר בין צפיפות המסך החלופית וקנה המידה
את מפות הסיביות לפי הצורך. עם זאת, כדי ליהנות מחוויית השימוש הטובה ביותר בכל סוגי המכשירים,
מספקים משאבים חלופיים לכל שלושת סוגי הצפיפות.
איך מערכת Android מוצאת את המשאב המתאים ביותר
כשמבקשים משאב שיש לו חלופות, מערכת Android בוחרת משאב חלופי לשימוש בזמן הריצה, בהתאם להגדרות המכשיר הנוכחיות. שפת תרגום להדגים איך מערכת Android בוחרת משאב חלופי, נניח שהספריות הבאות ניתנות להזזה כל אחת מהן כוללת גרסאות שונות של אותן תמונות:
drawable/ drawable-en/ drawable-fr-rCA/ drawable-en-port/ drawable-en-notouch-12key/ drawable-port-ldpi/ drawable-port-notouch-12key/
ונניח שהגדרת המכשיר היא:
לוקאל = en-GB
כיוון המסך = port
דחיסות הפיקסלים במסך = hdpi
סוג מסך המגע = notouch
שיטת הקלט הראשית של הטקסט = 12key
מערכת Android משווה בין ההגדרות של המכשיר למשאבים החלופיים הזמינים.
פריטים שניתן להזזה החל מ-drawable-en-port
.
המערכת מחליטה באילו משאבים להשתמש עם הרכיבים הבאים לוגיקה:
- להסיר קובצי משאבים שסותרים את תצורת המכשיר.
הספרייה
drawable-fr-rCA/
הוסרה כי היא שסותר את הלוקאלen-GB
.drawable/ drawable-en/
drawable-fr-rCA/drawable-en-port/ drawable-en-notouch-12key/ drawable-port-ldpi/ drawable-port-notouch-12key/חריג לכלל הזה: דחיסות הפיקסלים של המסך היא ערך האישור היחיד שאינו בוטלו עקב סתירה. למרות שצפיפות המסך של המכשיר היא באיכות HD, המדד
drawable-port-ldpi/
לא נמחק מפני שכל דחיסות המסך נחשב כהתאמה בשלב זה. מידע נוסף מופיע במאמר סקירה כללית על תאימות מסך. - מוצאים ברשימה את תוחם הקדימות הבא (טבלה 2). (מתחילים עם חשבון ניהול (MCC).)
- האם חלק מספריות המשאבים כוללות את המזהה הזה?
- אם לא, חוזרים לשלב השני ובודקים את הערך הבא. במשפט הזה, התשובה היא 'לא' עד שמגיעים לערך השפה.
- אם כן, ממשיכים לשלב הרביעי.
- מסירים ספריות משאבים שלא כוללות את התו המגדיר הזה. בדוגמה הזאת, המערכת
לאחר מכן כל הספריות שלא כוללות תוחם שפה:
drawable/drawable-en/ drawable-en-port/ drawable-en-notouch-12key/drawable-port-ldpi/drawable-port-notouch-12key/חריג לכלל הזה: אם התוחם המדובר הוא דחיסות הפיקסלים של המסך, מערכת Android בוחרת את האפשרות שהכי מתאימה לדחיסות המסך של המכשיר. באופן כללי, Android מעדיפה להקטין תמונה מקורית גדולה יותר כדי להקטין אותה תמונה מקורית. אפשר לקרוא מידע נוסף בקטע מסך סקירה כללית על התאימות.
- חוזרים על שלבים שתיים, שלוש וארבע עד שתישאר רק ספרייה אחת. בדוגמה הזו, המסך
הוא ערך האישור הבא שעבורו יש התאמות.
לכן, משאבים שלא מציינים את כיוון המסך יוסרו:
drawable-en/drawable-en-port/drawable-en-notouch-12key/הספרייה שנותרה היא
drawable-en-port
.
למרות שתהליך זה מבוצע עבור כל משאב המבוקש, המערכת מבצעת אופטימיזציה היבטים מסוימים בו. אחת האופטימיזציה הזו היא שברגע שתצורת המכשיר ידועה, הוא עשוי להסיר משאבים חלופיים שאף פעם לא יכולים להיות זהים. לדוגמה, אם ההגדרות השפה היא אנגלית, ואז כל ספריית משאבים שבה מוגדר תוחם השפה תוכן שאינו אנגלית אף פעם לא ייכלל במאגר המשאבים שנבדק (למרות ספריית משאבים בלי תוחם השפה.
בעת בחירת משאבים על סמך ערכי הגודל של המסך, המערכת משתמשת במשאבים שמיועד למסך קטן יותר מהמסך הנוכחי, אם אין משאבים מתאימים יותר. לדוגמה, מסך גדול משתמש במשאבי מסך בגודל רגיל אם יש צורך.
אבל אם
המשאבים היחידים הזמינים הם גדולים יותר מהמסך הנוכחי, המערכת
לא משתמשת בהם, והאפליקציה קורסת אם אין משאבים אחרים שתואמים למכשיר
הגדרה אישית. זה קורה, לדוגמה, אם כל משאבי הפריסה מתויגים באמצעות ערך האישור xlarge
,
אבל המכשיר הוא מסך בגודל רגיל.
הערה: הקדימות של ערך האישור (בטבלה 2) חשובה יותר
את מספר המזהים שתואמים בדיוק למכשיר. בדוגמה הקודמת, בשלב ארבע
האפשרות האחרונה ברשימה כוללת שלושה מאפיינים שתואמים בדיוק למכשיר (כיוון,
סוג מסך המגע ושיטת הקלט), ואילו ב-drawable-en
יש רק פרמטר אחד שתואם
(שפה). עם זאת, לשפה יש קדימות גבוהה יותר מהמגדירים האחרים האלו, לכן
drawable-port-notouch-12key
הוסר.