RelativeLayout یک گروه view است که viewهای فرزند را در موقعیتهای نسبی نمایش میدهد. موقعیت هر view میتواند نسبت به عناصر همنیا (مثلاً در سمت چپ یا زیر view دیگر) یا نسبت به ناحیه RelativeLayout والد (مثلاً ترازبندی در پایین، چپ یا مرکز) مشخص شود.
نکته: برای عملکرد بهتر و پشتیبانی از ابزارها، باید طرحبندی خود را با ConstraintLayout بسازید .

یک RelativeLayout یک ابزار بسیار قدرتمند برای طراحی رابط کاربری است زیرا میتواند گروههای نمای تو در تو را حذف کند و سلسله مراتب طرحبندی شما را مسطح نگه دارد، که این امر عملکرد را بهبود میبخشد. اگر متوجه شدید که از چندین گروه LinearLayout تو در تو استفاده میکنید، میتوانید آنها را با یک RelativeLayout واحد جایگزین کنید.
موقعیت یابی نماها
RelativeLayout به نماهای فرزند اجازه میدهد موقعیت خود را نسبت به نمای والد یا نسبت به یکدیگر (که توسط ID مشخص میشوند) مشخص کنند. بنابراین میتوانید دو عنصر را با حاشیه راست تراز کنید، یا یکی را زیر دیگری، در مرکز صفحه، در مرکز سمت چپ و غیره قرار دهید. به طور پیشفرض، همه نماهای فرزند در بالا-چپ طرحبندی رسم میشوند، بنابراین باید موقعیت هر نما را با استفاده از ویژگیهای مختلف طرحبندی موجود در RelativeLayout.LayoutParams تعریف کنید.
برخی از ویژگیهای طرحبندی متعدد موجود برای نماها در یک RelativeLayout عبارتند از:
android:layout_alignParentTop- اگر
"true"، لبه بالایی این نما با لبه بالایی نمای والد مطابقت دارد. android:layout_centerVertical- اگر
"true"، این فرزند را به صورت عمودی درون والدش قرار میدهد. -
android:layout_below - لبه بالایی این نما را زیر نمای مشخص شده با شناسه منبع قرار میدهد.
-
android:layout_toRightOf - لبه سمت چپ این نما را در سمت راست نمای مشخص شده با شناسه منبع قرار میدهد.
اینها فقط چند مثال هستند. تمام ویژگیهای طرحبندی در RelativeLayout.LayoutParams مستند شدهاند.
مقدار هر ویژگی layout یا یک مقدار بولی است که موقعیت layout را نسبت به RelativeLayout والد فعال میکند یا یک شناسه است که به نمای دیگری در layout اشاره میکند که نمای مورد نظر باید در مقابل آن موقعیت قرار گیرد.
در طرحبندی 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 مراجعه کنید.
