סוגי משאבים נוספים

בדף הזה מוגדרים סוגי המשאבים הבאים שאפשר להוציא משימוש:

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

בוליאני

ערך בוליאני שמוגדר ב-XML.

הערה: ערך בוליאני הוא משאב פשוט שיש הפניה אליו. באמצעות הערך שצוין במאפיין name, ולא בשם של קובץ ה-XML. בתור למשל, אפשר לשלב משאבי בוליאני עם משאבים פשוטים אחרים בקובץ XML אחד, תחת רכיב <resources> אחד.

מיקום הקובץ:

res/values/filename.xmlבצבע
שם הקובץ שרירותי. ה-name של הרכיב <bool> משמש כמשאב ID.
הפניה למשאבים:
ב-Java: R.bool.bool_name
ב-XML: @[package:]bool/bool_name
תחביר:
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <bool
        name="bool_name"
        >[true | false]</bool>
</resources>
רכיבים:
<resources>
חובה. זהו צומת הרמה הבסיסית (root).

אין מאפיינים.

<bool>
ערך בוליאני: true או false.

מאפיינים:

name
מחרוזת. שם לערך הבוליאני. הוא משמש כמזהה המשאב.
דוגמא:
קובץ XML נשמר ב-res/values-small/bools.xml:
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <bool name="screen_small">true</bool>
    <bool name="adjust_view_bounds">true</bool>
</resources>

קוד האפליקציה הבא מאחזר את הערך הבוליאני:

Kotlin

val screenIsSmall: Boolean = resources.getBoolean(R.bool.screen_small)

Java

Resources res = getResources();
boolean screenIsSmall = res.getBoolean(R.bool.screen_small);

קוד ה-XML של הפריסה הבא משתמש בערך הבוליאני של מאפיין:

<ImageView
    android:layout_height="fill_parent"
    android:layout_width="fill_parent"
    android:src="@drawable/logo"
    android:adjustViewBounds="@bool/adjust_view_bounds" />

צבע

ערך של צבע שמוגדר ב-XML. הצבע צוין באמצעות ערך RGB וערוץ אלפא. אפשר להשתמש במשאב צבעים כל מקום שמקבל ערך הקסדצימלי של צבע. אפשר גם להשתמש במשאב צבע כאשר צריך להשתמש במשאב שניתן להזזה ב-XML, למשל android:drawable="@color/green".

הערך מתחיל תמיד בתו פאונד (#) ואחריו מידע בצבע אלפא-אדום-ירוק-כחול באחד מהפורמטים הבאים:

  • #RGB
  • #ARGB
  • #RGGBB
  • #AARRGGBB

הערה: צבע הוא משאב פשוט שיש אליו הפניה באמצעות הערך שצוין במאפיין name, ולא בשם של קובץ ה-XML. בתור למשל, אפשר לשלב משאבי צבע עם משאבים פשוטים אחרים בקובץ XML אחד, תחת רכיב <resources> אחד.

מיקום הקובץ:

res/values/colors.xmlבצבע
שם הקובץ שרירותי. המאפיין name של הרכיב <color> משמש למזהה המשאב של הממשק.
הפניה למשאבים:
ב-Java: R.color.color_name
ב-XML: @[package:]color/color_name
תחביר:
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color
        name="color_name"
        >hex_color</color>
</resources>
רכיבים:
<resources>
חובה. זהו צומת הרמה הבסיסית (root).

אין מאפיינים.

<color>
צבע מבוטא בהקסדצימלי.

מאפיינים:

name
מחרוזת. שם לצבע. הוא משמש כמזהה המשאב.
דוגמא:
קובץ XML נשמר ב-res/values/colors.xml:
<?xml version="1.0" encoding="utf-8"?>
<resources>
   <color name="opaque_red">#f00</color>
   <color name="translucent_red">#80ff0000</color>
</resources>

קוד האפליקציה הבא מאחזר את משאב הצבע:

Kotlin

val color: Int = resources.getColor(R.color.opaque_red)

Java

Resources res = getResources();
int color = res.getColor(R.color.opaque_red);

קוד ה-XML של הפריסה הבא מחיל את הצבע על מאפיין:

<TextView
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:textColor="@color/translucent_red"
    android:text="Hello"/>

מאפיין

ערך מאפיין שמוגדר ב-XML. מאפיין מצוין באמצעות מספר ואחריו יחידת מידה, כמו 10px, 2in או 5sp. יחידות המידה הבאות נתמכות ב-Android:

dp
פיקסלים שאינם תלויים בדחיסות: יחידה מופשטת המבוססת על הצפיפות הפיזית של מסך. היחידות האלה הן ביחס למסך של 160dpi (נקודות לאינץ') שבו 1 dp שווה בערך לפיקסל אחד. במסך בעל צפיפות גבוהה יותר, מספר הפיקסלים לשרטוט 1 dp מוגדל לפי גורם שמתאים ל-DPI של המסך.

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

sp
פיקסלים שאינם תלויים בקנה מידה – דומה ליחידת ה-dp, אבל הוא גם משתנה בהתאם לגופן של המשתמש העדפות גודל. מומלץ להשתמש ביחידה הזו כשמציינים את גודלי הגופנים, כדי שהם יותאמו גם לדחיסות המסך וגם להעדפת המשתמש.
pt
נקודות: 1/72 אינץ' על סמך הגודל הפיזי של המסך, בהנחה שיש מסך בצפיפות של 72dpi.
px
פיקסלים: תואמים לפיקסלים שמופיעים בפועל במסך. לא מומלץ להשתמש ביחידה הזו, כי שהייצוגים בפועל עשויים להשתנות בין מכשירים. למכשירים שונים יכול להיות מספר שונה של פיקסלים לאינץ' ועשויים להופיע במסך יותר או פחות פיקסלים בסך הכול.
mm
מילימטרים: לפי הגודל הפיזי של המסך.
in
אינצ'ים: לפי הגודל הפיזי של המסך.

הערה: מאפיין הוא משאב פשוט שיש הפניה אליו באמצעות הערך שצוין במאפיין name, ולא בשם של קובץ ה-XML. בתור לדוגמה, אפשר לשלב משאבי מאפיינים עם משאבים פשוטים אחרים בקובץ XML אחד, תחת רכיב <resources> אחד.

מיקום הקובץ:

res/values/filename.xmlבצבע
שם הקובץ שרירותי. המאפיין name של הרכיב <dimen> משמש למזהה המשאב של הממשק.
הפניה למשאבים:
ב-Java: R.dimen.dimension_name
ב-XML: @[package:]dimen/dimension_name
תחביר:
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <dimen
        name="dimension_name"
        >dimension</dimen>
</resources>
רכיבים:
<resources>
חובה. זהו צומת הרמה הבסיסית (root).

אין מאפיינים.

<dimen>
מימד, מיוצג על ידי מספר ממשי (float) ואחריו יחידת מידה (dp, sp, pt, px, mm, in).

מאפיינים:

name
מחרוזת. שם המאפיין. הוא משמש כמזהה המשאב.
דוגמא:
קובץ XML נשמר ב-res/values/dimens.xml:
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <dimen name="textview_height">25dp</dimen>
    <dimen name="textview_width">150dp</dimen>
    <dimen name="ball_radius">30dp</dimen>
    <dimen name="font_size">16sp</dimen>
</resources>

קוד האפליקציה הבא מאחזר מאפיין:

Kotlin

val fontSize: Float = resources.getDimension(R.dimen.font_size)

Java

Resources res = getResources();
float fontSize = res.getDimension(R.dimen.font_size);

קוד ה-XML הבא של הפריסה מחיל מימדים על מאפיינים:

<TextView
    android:layout_height="@dimen/textview_height"
    android:layout_width="@dimen/textview_width"
    android:textSize="@dimen/font_size"/>

מזהה

מזהה משאב ייחודי שמוגדר ב-XML. שימוש בשם שסיפקת ב<item> הכלים למפתחים של Android יוצרים מספר שלם ייחודי במחלקה R.java של הפרויקט, ואפשר להשתמש בו מזהה למשאבים של אפליקציות, כמו View בפריסת ממשק המשתמש, או מספר שלם ייחודי לשימוש בקוד האפליקציה, כמו מזהה בתיבת דו-שיח של התוצאה.

הערה: מזהה הוא משאב פשוט שיש אליו הפניה באמצעות הערך שצוין במאפיין name, ולא בשם של קובץ ה-XML. בתור למשל, אפשר לשלב משאבי מזהים עם משאבים פשוטים אחרים בקובץ XML אחד, תחת רכיב <resources> אחד. כמו כן, משאב מזהה לא מפנה פריט משאב בפועל: הוא מזהה ייחודי שאפשר לצרף למשאבים אחרים או להשתמש בו כמספר שלם ייחודי באפליקציה.

מיקום הקובץ:

res/values/filename.xmlבצבע
שם הקובץ שרירותי.
הפניה למשאבים:
ב-Java: R.id.name
ב-XML: @[package:]id/name
תחביר:
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <item
        type="id"
        name="id_name" />
</resources>
רכיבים:
<resources>
חובה. זהו צומת הרמה הבסיסית (root).

אין מאפיינים.

<item>
מגדיר מזהה ייחודי. לא מקבל ערך, אלא רק מאפיינים.

מאפיינים:

type
חייב להיות "id".
name
מחרוזת. שם ייחודי למזהה.
דוגמא:

קובץ ה-XML נשמר ב-res/values/ids.xml:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <item type="id" name="button_ok" />
    <item type="id" name="dialog_exit" />
</resources>

קטע הקוד הבא של הפריסה משתמש במזהה "button_ok" לווידג'ט Button:

<Button android:id="@id/button_ok"
    style="@style/button_style" />

הערך android:id כאן לא כולל את סימן הפלוס בהפניה למזהה, כי המזהה כבר קיים, כמו שהוגדר בדוגמה הקודמת ל-ids.xml. כשמציינים מזהה למשאב XML באמצעות סימן הפלוס, בפורמט android:id="@+id/name", המשמעות היא שהמזהה "name" עדיין לא קיים והוא נוצר.

דוגמה נוספת: קטע הקוד הבא משתמש במזהה "dialog_exit" בתור מזהה ייחודי לתיבת דו-שיח:

Kotlin

showDialog(R.id.dialog_exit)

Java

showDialog(R.id.dialog_exit);

באותה אפליקציה, משווים את המזהה "dialog_exit" כשיוצרים תיבת דו-שיח:

Kotlin

override fun onCreateDialog(id: Int): Dialog? {
    return when(id) {
        R.id.dialog_exit -> {
            ...
        }
        else -> {
            null
        }
    }
}

Java

protected Dialog onCreateDialog(int id) {
    Dialog dialog;
    switch(id) {
    case R.id.dialog_exit:
        ...
        break;
    default:
        dialog = null;
    }
    return dialog;
}

מספר שלם

מספר שלם שמוגדר ב-XML.

הערה: מספר שלם הוא משאב פשוט שיש הפניה אליו באמצעות הערך שצוין במאפיין name, ולא בשם של קובץ ה-XML. בתור למשל, אפשר לשלב משאבים של מספרים שלמים עם משאבים פשוטים אחרים בקובץ XML אחד, תחת רכיב <resources> אחד.

מיקום הקובץ:

res/values/filename.xmlבצבע
שם הקובץ שרירותי. המאפיין name של הרכיב <integer> משמש למזהה המשאב של הממשק.
הפניה למשאבים:
ב-Java: R.integer.integer_name
ב-XML: @[package:]integer/integer_name
תחביר:
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <integer
        name="integer_name"
        >integer</integer>
</resources>
רכיבים:
<resources>
חובה. זהו צומת הרמה הבסיסית (root).

אין מאפיינים.

<integer>
מספר שלם.

מאפיינים:

name
מחרוזת. שם של המספר השלם. הוא משמש כמזהה המשאב.
דוגמא:

קובץ ה-XML נשמר ב-res/values/integers.xml:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <integer name="max_speed">75</integer>
    <integer name="min_speed">5</integer>
</resources>

קוד האפליקציה הבא מאחזר מספר שלם:

Kotlin

val maxSpeed: Int = resources.getInteger(R.integer.max_speed)

Java

Resources res = getResources();
int maxSpeed = res.getInteger(R.integer.max_speed);

מערך מספר שלם

מערך של מספרים שלמים שמוגדרים ב-XML.

הערה: מערך מספרים שלמים הוא משאב פשוט שיש אליו הפניה באמצעות הערך שצוין במאפיין name, ולא בשם של קובץ ה-XML. בתור אפשר לשלב משאבים של מערך עם מספרים שלמים עם משאבים פשוטים אחרים בקובץ XML אחד, תחת רכיב <resources> אחד.

מיקום הקובץ:

res/values/filename.xmlבצבע
שם הקובץ שרירותי. המאפיין name של הרכיב <integer-array> משמש למזהה המשאב של הממשק.
סוג נתונים של משאב מקומפל:
סמן המשאב למערך של מספרים שלמים.
הפניה למשאבים:
ב-Java: R.array.integer_array_name
ב-XML: @[package:]array/integer_array_name
תחביר:
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <integer-array
        name="integer_array_name">
        <item
            >integer</item>
    </integer-array>
</resources>
רכיבים:
<resources>
חובה. זהו צומת הרמה הבסיסית (root).

אין מאפיינים.

<integer-array>
מגדירה מערך של מספרים שלמים. מכיל רכיב צאצא אחד או יותר של <item>.

מאפיינים:

android:name
מחרוזת. שם למערך. השם הזה משמש בתור המשאב המזהה שיפנה למערך.
<item>
מספר שלם. הערך יכול להיות הפניה לערך אחר של מספר שלם. חייב להיות צאצא של רכיב <integer-array>.

אין מאפיינים.

דוגמא:
קובץ XML נשמר ב-res/values/integers.xml:
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <integer-array name="bits">
        <item>4</item>
        <item>8</item>
        <item>16</item>
        <item>32</item>
    </integer-array>
</resources>

קוד האפליקציה הבא מאחזר את מערך המספרים השלמים:

Kotlin

val bits: IntArray = resources.getIntArray(R.array.bits)

Java

Resources res = getResources();
int[] bits = res.getIntArray(R.array.bits);

מערך שהוקלד

TypedArray שמוגדר ב-XML. אפשר להשתמש כדי ליצור מערך של משאבים אחרים כמו משאבים שניתנים להזזה. המערך לא חייב להיות הומוגני, כך שאפשר ליצור מערך של סוגי משאבים מעורבים, צריך לדעת מהם סוגי הנתונים והמיקום שלהם במערך, כדי שתוכלו לקבל כל פריט עם השיטות get...() של הכיתה TypedArray.

הערה: מערך שהוקלד הוא משאב פשוט שיש אליו הפניה באמצעות הערך שצוין במאפיין name, ולא בשם של קובץ ה-XML. בתור למשל, אפשר לשלב משאבי מערך מסוגננים עם משאבים פשוטים אחרים בקובץ XML אחד, תחת רכיב <resources> אחד.

מיקום הקובץ:

res/values/filename.xmlבצבע
שם הקובץ שרירותי. המאפיין name של הרכיב <array> משמש למזהה המשאב של הממשק.
סוג נתונים של משאב מקומפל:
מצביע המשאב אל TypedArray.
הפניה למשאבים:
ב-Java: R.array.array_name
ב-XML: @[package:]array/array_name
תחביר:
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <array
        name="integer_array_name">
        <item>resource</item>
    </array>
</resources>
רכיבים:
<resources>
חובה. זהו צומת הרמה הבסיסית (root).

אין מאפיינים.

<array>
מגדירה מערך. מכיל רכיב צאצא אחד או יותר של <item>.

מאפיינים:

android:name
מחרוזת. שם למערך. השם הזה משמש בתור המשאב המזהה שיפנה למערך.
<item>
משאב גנרי. הערך יכול להיות הפניה למשאב או סוג פשוט של נתונים. חייב להיות צאצא של רכיב <array>.

אין מאפיינים.

דוגמא:
קובץ XML נשמר ב-res/values/arrays.xml:
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <array name="icons">
        <item>@drawable/home</item>
        <item>@drawable/settings</item>
        <item>@drawable/logout</item>
    </array>
    <array name="colors">
        <item>#FFFF0000</item>
        <item>#FF00FF00</item>
        <item>#FF0000FF</item>
    </array>
</resources>

קוד האפליקציה הבא מאחזר כל מערך ולאחר מכן מקבל את הערך הראשון בכל מערך:

Kotlin

val icons: TypedArray = resources.obtainTypedArray(R.array.icons)
val drawable: Drawable = icons.getDrawable(0)

val colors: TypedArray = resources.obtainTypedArray(R.array.colors)
val color: Int = colors.getColor(0,0)

Java

Resources res = getResources();
TypedArray icons = res.obtainTypedArray(R.array.icons);
Drawable drawable = icons.getDrawable(0);

TypedArray colors = res.obtainTypedArray(R.array.colors);
int color = colors.getColor(0,0);