چیدمان نسبی

روش نوشتن را امتحان کنید
Jetpack Compose ابزار رابط کاربری پیشنهادی برای اندروید است. یاد بگیرید که چگونه با طرح‌بندی‌ها در Compose کار کنید.

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 مراجعه کنید.