משאב הפריסה

משאב פריסה מגדיר את הארכיטקטורה של ממשק המשתמש ב-Activity או רכיב של ממשק משתמש.

מיקום הקובץ:

res/layout/filename.xmlבצבע
שם הקובץ משמש כמזהה המשאב.
סוג נתונים של משאב מקומפל:
מצביע המשאב למשאב View (או מחלקה משנית)
הפניה למשאבים:
ב-Java: R.layout.filename
ב-XML: @[package:]layout/filename
תחביר:
<?xml version="1.0" encoding="utf-8"?>
<ViewGroup
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@[+][package:]id/resource_name"
    android:layout_height=["dimension" | "match_parent" | "wrap_content"]
    android:layout_width=["dimension" | "match_parent" | "wrap_content"]
    [ViewGroup-specific attributes] >
    <View
        android:id="@[+][package:]id/resource_name"
        android:layout_height=["dimension" | "match_parent" | "wrap_content"]
        android:layout_width=["dimension" | "match_parent" | "wrap_content"]
        [View-specific attributes] >
        <requestFocus/>
    </View>
    <ViewGroup >
        <View />
    </ViewGroup>
    <include layout="@layout/layout_resource"/>
</ViewGroup>

הערה: הרכיב הבסיסי יכול להיות ViewGroup, View או רכיב <merge>, אבל יכול להיות רק רכיב שורש אחד והוא חייב להכיל את המאפיין xmlns:android עם android מרחב השמות כמו בדוגמת התחביר הקודמת.

רכיבים:
<ViewGroup>
קונטיינר של רכיבי View אחרים. יש הרבה סוגים שונים של ViewGroup אובייקטים, וכל אחד מהם מאפשר לציין את הפריסה של רכיבי הצאצא בדרכים שונות. סוגים שונים של ViewGroup אובייקטים כוללים את LinearLayout, RelativeLayout ו-FrameLayout.

לא מניחים שנגזרת של ViewGroup מקבל תצוגות מקוננות. חלק מקבוצות התצוגה הם הטמעות של המחלקה AdapterView, שקובעת הוא צאצאים רק מ-Adapter.

מאפיינים:

android:id
מזהה משאב שם משאב ייחודי לאלמנט, שאותו אפשר משמש לקבלת הפניה אל ViewGroup מהאפליקציה. לקבלת מידע נוסף מידע נוסף זמין בקטע ערך ל-android:id.
android:layout_height
מאפיין או מילת מפתח. חובה. הגובה של הקבוצה, ערך המאפיין (או משאב מאפיינים) או מילת מפתח ("match_parent" או "wrap_content"). לקבלת מידע נוסף, ראו את הערכים של android:layout_height הקטע android:layout_width.
android:layout_width
מאפיין או מילת מפתח. חובה. הרוחב של הקבוצה, ערך המאפיין (או משאב מאפיינים) או מילת מפתח ("match_parent" או "wrap_content"). לקבלת מידע נוסף, ראו את הערכים של android:layout_height הקטע android:layout_width.

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

<View>
רכיב בודד בממשק המשתמש, שנקרא בדרך כלל ווידג'ט. שונה בין סוגי האובייקטים View יש את TextView, Button ו-CheckBox.

מאפיינים:

android:id
מזהה משאב שם משאב ייחודי לאלמנט, שבו אפשר להשתמש כדי לקבל מהבקשה הפניה אל View. לקבלת מידע נוסף מידע נוסף זמין בקטע ערך ל-android:id.
android:layout_height
מאפיין או מילת מפתח. חובה. גובה הרכיב, כפי ערך של מאפיין (או משאב מאפיינים) או מילת מפתח ("match_parent" או "wrap_content"). לקבלת מידע נוסף, ראו את הערכים של android:layout_height הקטע android:layout_width.
android:layout_width
מאפיין או מילת מפתח. חובה. רוחב הרכיב, כפי ערך של מאפיין (או משאב מאפיינים) או מילת מפתח ("match_parent" או "wrap_content"). לקבלת מידע נוסף, ראו את הערכים של android:layout_height הקטע android:layout_width.

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

<requestFocus>
כל רכיב שמייצג אובייקט View יכול לכלול את הרכיב הריק הזה, שמאפשר להורה להתמקד במסך. אפשר להשתמש רק באחד מהפריטים האלה רכיבים לקובץ.
<include>
כולל קובץ פריסה לפריסה הזו.

מאפיינים:

layout
משאב פריסה. חובה. הפניה לפריסה משאב.
android:id
מזהה משאב שינוי המזהה שניתן לתצוגת הרמה הבסיסית (root) בפריסה הכלולה.
android:layout_height
מאפיין או מילת מפתח. משנה את הגובה שניתן לתצוגת הרמה הבסיסית (root) בפריסה שכלולה. תקף רק אם מוצהר גם על android:layout_width.
android:layout_width
מאפיין או מילת מפתח. מבטל את הרוחב שניתן לתצוגת הרמה הבסיסית (root) במקטע בפריסה שכלולה. תקף רק אם מוצהר גם על android:layout_height.

אפשר לכלול ב<include> מאפייני פריסה אחרים ש שנתמכות על ידי רכיב הבסיס בפריסה שכלולה, והן מבטלות את אלה שהוגדרו רכיב ברמה הבסיסית (root).

זהירות: אם רוצים לשנות את מאפייני הפריסה באמצעות התג <include>, חובה לשנות את שניהם android:layout_height ו-android:layout_width בסדר עבור ומאפייני פריסה אחרים ייכנסו לתוקף.

דרך נוספת לכלול פריסה היא להשתמש ב-ViewStub, מודל קל בתצוגה שלא תופסת שטח פריסה עד שתנפחו אותה באופן מפורש. כשעושים זאת, היא כוללת מוגדר לפי המאפיין android:layout שלו. לקבלת מידע נוסף על השימוש ב-ViewStub, אפשר לקרוא את המאמר טעינה צפיות לפי דרישה.

<merge>
רכיב בסיס חלופי שלא מצויר בהיררכיית הפריסה. שימוש במחרוזת הזו רכיב השורש שימושי כאשר יודעים שהפריסה הזו ממוקמת בפריסה כבר מכיל את ההורה המתאים View כדי להכיל את הצאצאים של רכיב <merge>.

האפשרות הזאת שימושית במיוחד אם אתם מתכננים לכלול את הפריסה הזו בקובץ פריסה אחר באמצעות הפקודה <include> לפריסה הזו לא נדרש מאגר ViewGroup שונה. לקבלת מידע נוסף למידע על מיזוג פריסות, אפשר לקרוא את המאמר שימוש חוזר בפריסות עם <include>.

ערך של android:id

בערך המזהה, משתמשים בדרך כלל בטופס התחביר הבא: "@+id/name", כמו בדוגמה הבאה. סמל הפלוס, +, מציין שמדובר במזהה משאב חדש, והכלי aapt יוצר מספר שלם חדש של משאב במחלקה R.java, אם הוא לא קיים כבר.

<TextView android:id="@+id/nameTextbox"/>

השם nameTextbox הוא עכשיו מזהה משאב שמצורף לרכיב הזה. לאחר מכן אפשר להתייחס אל TextView שאליו המזהה משויך ב-Java:

Kotlin

val textView: TextView? = findViewById(R.id.nameTextbox)

Java

TextView textView = findViewById(R.id.nameTextbox);

הקוד הזה מחזיר את האובייקט TextView.

עם זאת, אם כבר הגדרתם משאב של מזהה, והוא לא כבר נעשה שימוש בתכונה הזו, ניתן להחיל את המזהה הזה על רכיב View על ידי החרגת המאפיין סימן פלוס בערך android:id.

ערכים עבור android:layout_height ו android:layout_width

ערכי הגובה והרוחב מבוטאים באמצעות כל אחד מהערכים הבאים: מאפיין יחידות הנתמכות ב-Android (px, dp, sp, pt, in, mm) או באמצעות מילות המפתח הבאות:

ערךתיאור
match_parent מגדיר את המאפיין כך שיתאים למאפיין של רכיב ההורה. נוסף ברמת API 8 אל להוציא משימוש את fill_parent.
wrap_content מגדיר את המאפיין רק לגודל הנדרש כדי להתאים לתוכן של הרכיב הזה.

רכיבי תצוגה בהתאמה אישית

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

דוגמא:
קובץ XML נשמר ב-res/layout/main_activity.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_width="match_parent"
              android:layout_height="match_parent"
              android:orientation="vertical" >
    <TextView android:id="@+id/text"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:text="Hello, I am a TextView" />
    <Button android:id="@+id/button"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Hello, I am a Button" />
</LinearLayout>

קוד האפליקציה הזה טוען את הפריסה של Activity ב onCreate() method:

Kotlin

public override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.main_activity)
}

Java

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main_activity);
}
למידע נוסף: