RelativeLayout — جوہر، Android ایپلیکیشنز میں لے آؤٹ قواعد

مصنف: IT Sectr اشاعت: 2026-02-24 مطالعے کا وقت: 9 منٹ

ہم RelativeLayout کے جوہر کی وضاحت کرتے ہیں — Android SDK میں ایک ViewGroup جو چائلڈ عناصر کو ایک دوسرے کے نسبت یا پیرنٹ کنٹینر کے نسبت پوزیشن دیتا ہے۔ LinearLayout کے برعکس، جو عناصر کو سختی سے ترتیب وار ترتیب دیتا ہے، RelativeLayout آپ کو کسی بھی عنصر کو اس کی ID کے ذریعے کسی دوسرے عنصر کے بائیں، دائیں، اوپر، نیچے یا درمیان میں رکھنے کی اجازت دیتا ہے۔ یہ RelativeLayout کو نیسٹنگ کے بغیر اوورلیپنگ اور پیچیدہ لے آؤٹ کے لیے آسان بناتا ہے۔ بنیادی قواعد Android Developers دستاویزات میں بیان کیے گئے ہیں۔

اہم نکات

  • layout_below / layout_above — کسی عنصر کو مخصوص عنصر کے ID کے ذریعے اوپر یا نیچے اینکر کرنا؛ بہاؤ بنانے کے لیے کلیدی صفات۔
  • alignParentTop / alignParentBottom — کسی عنصر کے کنارے کو پیرنٹ کے متعلقہ کنارے سے اینکر کرنا؛ چاروں اطراف میں کام کرتا ہے۔
  • مرکز اور مرکزیت — centerInParent (دونوں محوروں کا مرکز)، centerHorizontal (X پر مرکز)، centerVertical (Y پر مرکز)۔
  • toLeftOf / toRightOf — کسی عنصر کو مخصوص عنصر کے بائیں یا دائیں رکھنا، بغیر اوورلیپنگ کے۔
  • اوورلیپ قواعد — اگر قواعد متصادم ہوں (مثلاً، alignParentTop اور کسی دوسرے کا below)، ترجیح XML میں آخری اعلان کردہ قاعدے کو دی جاتی ہے۔

RelativeLayout کیا ہے؟

RelativeLayout — ایک ViewGroup جو Android SDK میں API Level 1 سے متعارف کرائی گئی، جو اعلانیہ قواعد (layout rules) کے ذریعے چائلڈ عناصر کو پیرنٹ یا دیگر چائلڈ عناصر کے نسبت پوزیشن دیتی ہے۔ ہر قاعدہ ایک XML صفت کے ذریعے سیٹ کیا جاتا ہے جیسے android:layout_above، android:layout_below، android:layout_toLeftOf جس میں ہدف عنصر کی ID کی قدر ہوتی ہے۔

RelativeLayout کے آنے سے پہلے، ڈویلپرز کو ہر غیر معیاری پوزیشننگ کے لیے نیسٹڈ LinearLayout استعمال کرنا پڑتا تھا — اس سے گہری نیسٹنگ اور سست رینڈرنگ ہوتی تھی۔ RelativeLayout نے ایک ہی درجہ بندی کی سطح پر رشتہ دار پوزیشننگ پیش کرکے اس مسئلے کو حل کیا۔ تاہم، اس کی لچک جدید ConstraintLayout کے مقابلے میں محدود ہے: RelativeLayout زنجیریں، رکاوٹیں، رہنما خطوط یا فیصد پر مبنی جہتوں کو سپورٹ نہیں کرتا۔

RelativeLayout کی دو اہم خصوصیات ہیں: ایک onMeasure پاس (LinearLayout کے برعکس جس میں weight کے لیے دو پاس درکار ہیں) اور اعلان کی ترتیب پر انحصار — اگر عنصر A عنصر B کا حوالہ دیتا ہے، اور B کا اعلان A کے بعد کیا گیا ہے، تو A کی پیمائش کے وقت B کا سائز معلوم ہونا چاہیے۔ Android Developers Guide (2024) کے مطابق، RelativeLayout پیمائش ایک پاس میں کرتا ہے اگر تمام قواعد پہلے سے ماپے گئے عناصر کا حوالہ دیں۔ بصورت دیگر، دوسرے پاس کی ضرورت ہوتی ہے، جو کارکردگی کو کم کرتا ہے۔

RelativeLayout کی کب ضرورت ہے؟

RelativeLayout سادہ لے آؤٹ کے لیے موزوں ہے جس میں 3–7 عناصر ہوں جہاں رشتہ دار پوزیشننگ درکار ہو (بٹن کے اوپر لیبل، متن کے دائیں آئیکن، اسکرین کے نیچے پینل)۔ نئے پروجیکٹس کے لیے، ConstraintLayout کی سفارش کی جاتی ہے، لیکن RelativeLayout اب بھی میراثی کوڈ اور لائبریریوں میں وسیع پیمانے پر استعمال ہوتا ہے۔

پوزیشننگ کے قواعد: relative اور align

RelativeLayout دو قسم کے قواعد استعمال کرتا ہے: relative قواعد (کسی دوسرے عنصر کے نسبت پوزیشننگ) اور align قواعد (پیرنٹ سے اینکرنگ)۔ ہر چائلڈ عنصر میں لامحدود تعداد میں قواعد ہو سکتے ہیں، لیکن متصادم قواعد (مثلاً، alignParentTop اور کسی دوسرے عنصر کا below) آخری اعلان کردہ صفت کے حق میں حل کیے جاتے ہیں۔

Relative قواعد: - android:layout_above="@id/target" — عنصر کا نچلا کنارہ target کے اوپری کنارے سے اینکر ہوتا ہے۔ - android:layout_below="@id/target" — عنصر کا اوپری کنارہ target کے نچلے کنارے سے اینکر ہوتا ہے۔ - android:layout_toLeftOf="@id/target" — دایاں کنارہ target کے بائیں کنارے سے اینکر ہوتا ہے۔ - android:layout_toRightOf="@id/target" — بایاں کنارہ target کے دائیں کنارے سے اینکر ہوتا ہے۔ - android:layout_toStartOf="@id/target" — RTL مقامات کے لیے toLeftOf کے مشابہ۔ - android:layout_toEndOf="@id/target" — RTL کے لیے toRightOf کے مشابہ۔

Align قواعد (پیرنٹ سے): - android:layout_alignParentTop="true" — عنصر کا اوپری کنارہ پیرنٹ کے اوپری کنارے سے ملتا ہے۔ - android:layout_alignParentBottom="true" — نچلا کنارہ پیرنٹ کے نچلے کنارے سے ملتا ہے۔ - android:layout_alignParentLeft="true" — بایاں کنارہ پیرنٹ کے بائیں کنارے سے ملتا ہے۔ - android:layout_alignParentRight="true" — دایاں کنارہ پیرنٹ کے دائیں کنارے سے ملتا ہے۔ - android:layout_alignParentStart اور android:layout_alignParentEnd — RTL کے لیے۔

دیگر عناصر سے align قواعد: - android:layout_alignTop="@id/target" — عنصر کا اوپری حصہ target کے اوپری حصے سے ملتا ہے۔ - android:layout_alignBottom، android:layout_alignLeft، android:layout_alignRight، android:layout_alignStart، android:layout_alignEnd — مشابہ۔ - android:layout_alignBaseline="@id/target" — متن کی بنیاد لائن کے مطابق سیدھ (مختلف فونٹ سائز کی تاروں کے لیے مفید)۔

مرکزیت اور Z ترتیب

RelativeLayout میں مرکزیت تین صفات کے ذریعے سیٹ کی جاتی ہے: android:layout_centerInParent="true" (دونوں محوروں پر پیرنٹ کا مرکز)، android:layout_centerHorizontal="true" (افقی مرکز) اور android:layout_centerVertical="true" (عمودی مرکز)۔ مرکزیت دیگر قواعد کے ساتھ مطابقت رکھتی ہے: ایک عنصر افقی طور پر مرکز میں ہو سکتا ہے اور پیرنٹ کے نچلے کنارے سے اینکر ہو سکتا ہے۔

Z ترتیب (اوورلی ترتیب) RelativeLayout میں XML میں عناصر کے اعلان کی ترتیب سے متعین ہوتی ہے۔ پہلے اعلان کردہ عنصر پہلے کھینچا جاتا ہے (نیچے ہوگا)، آخری — آخر میں (اوپر ہوگا)۔ اگر آپ XML کو تبدیل کیے بغیر اوورلی ترتیب تبدیل کرنا چاہتے ہیں، تو android:elevation (API 21 سے) استعمال کریں — زیادہ elevation والے عناصر اوپر کھینچے جاتے ہیں۔ API 21 سے نیچے کے ورژن کے لیے، اوورلی ترتیب صرف اعلان کی ترتیب سے کنٹرول ہوتی ہے۔

اہم: RelativeLayout پیرنٹ کے لیے android:elevation صفت کو سپورٹ نہیں کرتا — ہر عنصر اپنی elevation کو کنٹرول کرتا ہے۔ جب پوزیشننگ کے قواعد اور elevation متصادم ہوں (مثلاً، اوورلیپنگ عناصر)، elevation رینڈرنگ کے لیے ترجیح رکھتا ہے، لیکن پوزیشننگ کے لیے نہیں — زیادہ elevation والا عنصر بصری طور پر دوسرے عنصر کو اوورلیپ کر سکتا ہے، چاہے اس کے لے آؤٹ قواعد اسے "پیچھے" رکھیں۔

مثالیں: RelativeLayout کے ساتھ XML لے آؤٹ

مثال 1: صارف پروفائل

اوپر مرکز میں اوتار، اوتار کے نیچے نام، نام کے نیچے حیثیت، اسکرین کے نیچے ایکشن بٹن۔ تمام عناصر ترتیب وار اینکرنگ کے لیے relative قواعد استعمال کرتے ہیں۔

xml
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ImageView
        android:id="@+id/avatar"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="32dp"
        android:src="@drawable/avatar_placeholder" />

    <TextView
        android:id="@+id/user_name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/avatar"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="12dp"
        android:text="ایوان ایوانوف"
        android:textSize="20sp"
        android:textStyle="bold" />

    <TextView
        android:id="@+id/user_status"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/user_name"
        android:layout_centerHorizontal="true"
        android:text="آن لائن"
        android:textColor="@color/green" />

    <Button
        android:id="@+id/edit_button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:layout_marginBottom="24dp"
        android:text="پروفائل میں ترمیم کریں" />

</RelativeLayout>

اوتار marginTop + centerHorizontal کے ذریعے اوپر سے اینکر ہے، نام layout_below کے ذریعے اوتار کے نیچے، حیثیت نام کے نیچے، اور بٹن alignParentBottom کے ذریعے پیرنٹ کے نچلے کنارے سے اینکر ہے۔ تمام عناصر ایک دوسرے سے آزاد ہیں — کوئی زنجیر یا نیسٹنگ نہیں۔

مثال 2: آئیکن اور بیج کے ساتھ پینل

اوپری دائیں کونے میں سرخ بیج (نمبر کے ساتھ دائرہ) والا آئیکن۔ بیج آئیکن کے نسبت اس کے کناروں پر سیدھ کے ذریعے اوورلیپ کے لیے منفی مارجن کے ساتھ پوزیشن کیا گیا ہے۔

xml
<RelativeLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content">

    <ImageView
        android:id="@+id/icon"
        android:layout_width="48dp"
        android:layout_height="48dp"
        android:src="@drawable/ic_notification" />

    <TextView
        android:id="@+id/badge"
        android:layout_width="20dp"
        android:layout_height="20dp"
        android:layout_alignTop="@+id/icon"
        android:layout_alignRight="@+id/icon"
        android:layout_marginTop="-6dp"
        android:layout_marginRight="-6dp"
        android:gravity="center"
        android:background="@drawable/badge_background"
        android:text="3"
        android:textColor="@android:color/white"
        android:textSize="10sp" />

</RelativeLayout>

بیج آئیکن کے اوپری اور دائیں کناروں سے اینکر ہے۔ منفی مارجن (-6dp) بیج کو باہر کی طرف منتقل کرتے ہیں، آئیکن کی سرحد کو اوورلیپ کرنے کا اثر پیدا کرتے ہیں۔ یہ اطلاعات کے لیے ایک مقبول نمونہ ہے، جس کے لیے RelativeLayout کے بغیر FrameLayout یا کسٹم ڈرائنگ کی ضرورت ہوگی۔

مثال 3: RelativeLayout کے ساتھ لاگ ان اسکرین

لاگ ان فارم: لوگو اوپر مرکز میں، اس کے نیچے ای میل فیلڈ، ای میل کے نیچے پاس ورڈ فیلڈ، پاس ورڈ کے نیچے "لاگ ان" بٹن، "رجسٹر" لنک نیچے سے اینکر۔ تمام عناصر layout_below کے ذریعے ترتیب وار اینکر ہیں۔

xml
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="24dp">

    <TextView
        android:id="@+id/logo"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="48dp"
        android:text="MyApp"
        android:textSize="32sp"
        android:textStyle="bold" />

    <EditText
        android:id="@+id/email_input"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/logo"
        android:layout_marginTop="32dp"
        android:hint="Email" />

    <EditText
        android:id="@+id/password_input"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/email_input"
        android:layout_marginTop="16dp"
        android:hint="پاس ورڈ"
        android:inputType="textPassword" />

    <Button
        android:id="@+id/login_button"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/password_input"
        android:layout_marginTop="24dp"
        android:text="لاگ ان کریں" />

    <TextView
        android:id="@+id/register_link"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:layout_marginBottom="16dp"
        android:text="اکاؤنٹ نہیں ہے؟ رجسٹر کریں"
        android:textColor="@color/primary" />

</RelativeLayout>

اسکرین ایک ہی درجہ بندی کی سطح پر 5 عناصر استعمال کرتی ہے۔ اوپر سے نیچے کا بہاؤ (لوگو → ای میل → پاس ورڈ → بٹن) layout_below کے ذریعے حاصل کیا جاتا ہے، اور لنک alignParentBottom کے ذریعے نیچے دھکیل دیا جاتا ہے۔ اسی فعالیت کے لیے، LinearLayout کو دو نیسٹڈ کنٹینرز کی ضرورت ہوگی (ایک اوپری گروپ کے لیے، دوسرا weight کے ساتھ لنک کے لیے)۔

RelativeLayout بمقابلہ ConstraintLayout: موازنہ

رشتہ دار پوزیشننگ کے لیے دو ViewGroup کا موازنہ: RelativeLayout (کلاسک، API 1+) اور ConstraintLayout (جدید، Jetpack)۔ معیار: لچک، کارکردگی، RTL سپورٹ اور موافقت۔

خصوصیتRelativeLayoutConstraintLayout
فیصد جہتیںنہیں (صرف فکسڈ اور match_parent)ہاں (width_percent، height_percent، guideline_percent)
RTL سپورٹstart/end کے ذریعے (API 17+)بلٹ ان
Chain / زنجیریںنہیںہاں (spread، spread_inside، packed)
Barrier / Group / Flowنہیںہاں (ورچوئل مددگار)
MotionLayout اینیمیشننہیںہاں
onMeasure پاس1 (انحصار سائیکل کے بغیر)2 (ہمیشہ، لیکن بہتر بنایا گیا)
مرکزیتcenterInParent، centerHorizontal، centerVerticalمخالف رکاوٹوں کے ساتھ bias (0.0–1.0) کے ذریعے
کب استعمال کریںمیراثی کوڈ، 3–7 عناصر کے ساتھ سادہ لے آؤٹنئے پروجیکٹ، پیچیدہ اسکرینز، موافقت پذیر لے آؤٹ

RelativeLayout ایک کے علاوہ تقریباً ہر پہلو میں ConstraintLayout سے کمتر ہے: یہ API 1 سے Android SDK میں بلٹ ان ہے اور اسے اضافی انحصار کی ضرورت نہیں ہے۔ ان پروجیکٹس کے لیے جو اب بھی API 14 (Android 4.0) سے نیچے minSdk استعمال کرتے ہیں، RelativeLayout رشتہ دار پوزیشننگ کے لیے واحد معیاری آپشن ہے۔ باقی تمام صورتوں میں، Google ConstraintLayout کی سفارش کرتا ہے۔

اکثر پوچھے گئے سوالات

RelativeLayout کا عنصر کیوں ظاہر نہیں ہوتا؟

سب سے زیادہ ممکنہ وجہ پوزیشننگ کے کافی قواعد کی کمی ہے۔ RelativeLayout میں ہر عنصر میں کم از کم ایک افقی قاعدہ (alignParentLeft، toRightOf، centerHorizontal) اور ایک عمودی قاعدہ (alignParentTop، below، centerVertical) ہونا چاہیے۔ اگر قواعد نہ ہوں، تو عنصر پوزیشن (0,0) پر ہوتا ہے اور دوسرے عناصر کے نیچے یا اسکرین سے باہر چھپا ہو سکتا ہے۔ دوسری وجہ ایک چکری انحصار ہے (عنصر A، B سے منسلک ہے، B، A سے منسلک ہے)، جو غیر متوقع رویے کا باعث بنتی ہے۔

RelativeLayout میں اسکرین پر عنصر کو مرکز میں کیسے رکھیں؟

صفات استعمال کریں android:layout_centerInParent="true"۔ یہ عنصر کو دونوں محوروں پر بیک وقت مرکز میں رکھتا ہے۔ اگر صرف افقی طور پر درکار ہو — android:layout_centerHorizontal="true"، صرف عمودی — android:layout_centerVertical="true"۔ مرکزیت مارجن کے ساتھ مل کر کام کرتی ہے — عنصر مخصوص آفسیٹ کے ذریعے مرکز کے نسبت منتقل ہو جائے گا۔

کیا RecyclerView میں RelativeLayout استعمال کیا جا سکتا ہے؟

ہاں، لیکن سفارش نہیں کی جاتی۔ RelativeLayout چکری انحصار کی موجودگی میں دو onMeasure پاس کرتا ہے، جو RecyclerView فہرستوں میں ConstraintLayout سے 15–30% سست ہے۔ RecyclerView آئٹم لے آؤٹ کے لیے، ConstraintLayout استعمال کریں — یہ کم سے کم پیمائش کے وقت کے ساتھ ایک فلیٹ درجہ بندی فراہم کرتا ہے۔ اگر RelativeLayout پہلے سے کسی میراثی پروجیکٹ میں استعمال ہو رہا ہے، تو یقینی بنائیں کہ عناصر چکری انحصار پیدا نہیں کرتے، اور Profile GPU Rendering کے ذریعے اسکرول FPS کی پیمائش کریں۔

RelativeLayout میں layout_margin layout_marginTop سے کیسے مختلف ہے؟

android:layout_margin تمام اطراف میں بیک وقت مارجن سیٹ کرتا ہے۔ android:layout_marginTop — صرف اوپر۔ زیادہ مخصوص صفت کو ترجیح دی جاتی ہے: اگر دونوں layout_margin (16dp) اور layout_marginTop (8dp) سیٹ ہوں، تو اوپر کا مارجن 8dp ہوگا۔ RelativeLayout میں، مارجن ملحقہ عنصر کے مقابلے میں رکاوٹ کے نسبت کام کرتا ہے: layout_below="@id/target" کے ساتھ layout_marginTop عنصر کے اوپری کنارے سے target کے نچلے کنارے تک کا مارجن ہے۔

خلاصہ

  • RelativeLayout — اعلانیہ قواعد کے ذریعے عناصر کو ایک دوسرے کے نسبت یا پیرنٹ کے نسبت پوزیشن کرنے کے لیے ایک ViewGroup۔
  • اینکر قواعد — layout_below/above (عمودی)، layout_toLeftOf/toRightOf (افقی)، alignParentTop/Bottom (پیرنٹ سے)۔
  • مرکزیت — centerInParent (مرکز)، centerHorizontal (X پر)، centerVertical (Y پر) فوری سیدھ کے لیے۔
  • Z ترتیب — XML میں اعلان کی ترتیب سے متعین؛ elevation (API 21+) رینڈرنگ کے دوران Z ترتیب کو تبدیل کرتا ہے۔
  • حدود — کوئی فیصد جہتیں، زنجیریں، رکاوٹیں نہیں؛ چکری انحصار دوسرے onMeasure پاس کا سبب بنتی ہے۔
  • کارکردگی — سائیکل کے بغیر 1 onMeasure پاس، لیکن پیچیدہ لے آؤٹ میں ConstraintLayout سے کمتر۔
  • سفارش — میراثی پروجیکٹس میں استعمال کریں؛ نئی اسکرینوں کے لیے ConstraintLayout منتخب کریں۔

ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے

IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔

پروجیکٹ پر بحث کریں

مزید پڑھیں