פריסה יחסית

אפשר לנסות את הדרך של כתיבת הודעה
‫Jetpack Compose היא ערכת הכלים המומלצת לבניית ממשק משתמש ב-Android. איך עובדים עם פריסות בכתיבת אימייל

RelativeLayout היא קבוצת תצוגות שמציגה תצוגות צאצא במיקומים יחסיים. אפשר לציין את המיקום של כל תצוגה ביחס לאלמנטים באותה רמה (למשל, משמאל לתצוגה אחרת או מתחתיה) או במיקומים ביחס לאזור RelativeLayout של רכיב האב (למשל, מיושר לתחתית, לשמאל או למרכז).

הערה: כדי לשפר את הביצועים ולקבל תמיכה בכלי פיתוח, מומלץ לבנות את הפריסה באמצעות ConstraintLayout.

RelativeLayout הוא כלי שימושי מאוד לעיצוב ממשק משתמש, כי הוא יכול לבטל קבוצות תצוגה מקוננות ולשמור על היררכיית הפריסה שטוחה, מה שמשפר את הביצועים. אם אתם משתמשים בכמה קבוצות LinearLayout מקוננות, יכול להיות שתוכלו להחליף אותן בקבוצה RelativeLayout אחת.

צפיות במיצוב

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

דוגמאות לכמה ממאפייני הפריסה הרבים שזמינים לתצוגות ב-RelativeLayout:

android:layout_alignParentTop
If "true", makes the top edge of this view match the top edge of the parent.
android:layout_centerVertical
אם "true", הצאצא ממוקם במרכז האנכי של ההורה.
android:layout_below
ממקם את הקצה העליון של התצוגה הזו מתחת לתצוגה שצוינה באמצעות מזהה משאב.
android:layout_toRightOf
ממקם את הקצה השמאלי של התצוגה הזו מימין לתצוגה שצוינה באמצעות מזהה משאב.

אלה רק כמה דוגמאות. כל מאפייני הפריסה מתועדים בכתובת RelativeLayout.LayoutParams.

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

בפריסת ה-XML, אפשר להצהיר על תלות בתצוגות אחרות בפריסה בכל סדר. לדוגמה, אפשר להצהיר ש-view1 יוצב מתחת ל-view2 גם אם view2 הוא התצוגה האחרונה שהוצהרה בהיררכיה. הדוגמה הבאה ממחישה תרחיש כזה.

דוגמה

כל אחד מהמאפיינים ששולטים במיקום היחסי של כל תצוגה מודגש.

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingLeft="16dp"
    android:paddingRight="16dp" >
    <EditText
        android:id="@+id/name"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="@string/reminder" />
    <Spinner
        android:id="@+id/dates"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_below="@id/name"
        android:layout_alignParentLeft="true"
        android:layout_toLeftOf="@+id/times" />
    <Spinner
        android:id="@id/times"
        android:layout_width="96dp"
        android:layout_height="wrap_content"
        android:layout_below="@id/name"
        android:layout_alignParentRight="true" />
    <Button
        android:layout_width="96dp"
        android:layout_height="wrap_content"
        android:layout_below="@id/times"
        android:layout_alignParentRight="true"
        android:text="@string/done" />
</RelativeLayout>

פרטים על כל מאפייני הפריסה שזמינים לכל תצוגת צאצא של RelativeLayout מופיעים במאמר RelativeLayout.LayoutParams.