LinearLayout: بنیادی باتیں، رخ اور Android میں وزن کی تقسیم

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

LinearLayout کی بنیادی باتیں بیان کرتے ہیں — Android SDK میں ایک بنیادی ViewGroup جو چائلڈ عناصر کو عمودی (LinearLayout.VERTICAL) یا افقی (LinearLayout.HORIZONTAL) طور پر ایک لائن میں سیدھ میں لاتی ہے۔ LinearLayout بٹنوں کی قطار، سیٹنگز کی فہرست یا ان پٹ فارم بنانے کا آسان ترین اور تیز ترین طریقہ ہے جب لے آؤٹ کی پیچیدگی 5–10 عناصر سے زیادہ نہ ہو۔ layout_weight اور orientation خصوصیات جگہ کی تقسیم اور سمت کا انتظام کرتی ہیں۔ تفصیلی تصریح — LinearLayout API Reference میں۔

اہم نکات

  • رخ — LinearLayout android:orientation کے ذریعے عناصر کو ترتیب وار عمودی (VERTICAL) یا افقی (HORIZONTAL) رکھتا ہے۔
  • layout_weight — عناصر کے وزن کے تناسب سے خالی جگہ تقسیم کرتا ہے؛ وزن کا مجموعہ ہر ایک کا حصہ متعین کرتا ہے۔
  • gravity بمقابلہ layout_gravity — android:gravity LinearLayout کے اندر مواد کو سیدھ میں لاتا ہے؛ android:layout_gravity عنصر کو خود والد کے اندر سیدھ میں لاتا ہے۔
  • گھریلو پن — اہم خامی: پیچیدہ گرڈز کے لیے متعدد LinearLayouts کو گھیرنا پڑتا ہے، جو کارکردگی کو کم کرتا ہے۔
  • بنیاد لائن سیدھ — پیڈنگ اور عنصر کی اونچائی سے قطع نظر فونٹ کی بنیاد لائن کے ذریعے متن کے عناصر کو سیدھ میں لانا۔

LinearLayout کیا ہے؟

LinearLayout — Android SDK (API Level 1) میں پہلے ViewGroups میں سے ایک، جو چائلڈ عناصر کو ترتیب وار ایک قطار یا کالم میں رکھنے کے لیے ڈیزائن کیا گیا ہے۔ ہر نیا عنصر پچھلے عنصر کے بعد رکھا جاتا ہے، اور سمت android:orientation خصوصیت سے متعین کی جاتی ہے۔ LinearLayout آسان ترین اور پیش گوئی کے قابل Android کنٹینر ہے، جو اسے لکیری انٹرفیس کے لیے مثالی انتخاب بناتا ہے: بٹنوں کی قطاریں، آئیکن اور متن کے ساتھ سیٹنگز کی فہرستیں، افقی مینیو۔

تاریخی طور پر، LinearLayout پہلا ViewGroup ہے جس سے ایک ابتدائی Android ڈیویلپر واقف ہوتا ہے۔ اس کا فائدہ شفافیت ہے: چائلڈ عناصر چھپی ہوئی پوزیشننگ قواعد کے بغیر، اعلان کی ترتیب میں سختی سے رکھے جاتے ہیں۔ RelativeLayout کے برعکس، جہاں ایک عنصر کسی بھی پڑوسی سے منسلک ہو سکتا ہے، یا ConstraintLayout اپنے رکاوٹ کے نظام کے ساتھ، LinearLayout "پہلے بائیں/اوپر، اس کے بعد دوسرا، دوسرے کے بعد تیسرا" اصول پر کام کرتا ہے۔ Google I/O 2017 کے مطابق، Google Play کے ٹاپ 1000 ایپس میں 78% اسکرینیں LinearLayout کو اپنے بنیادی یا معاون کنٹینر کے طور پر استعمال کرتی ہیں۔

LinearLayout کا اہم میٹرک LinearLayout.MeasureSpec — سائز کے انتظام کا نظام ہے۔ VERTICAL رخ کے ساتھ، ہر عنصر کی چوڑائی والد کی چوڑائی (match_parent یا مقررہ) کے برابر ہوتی ہے، اور اونچائی مواد یا خصوصیت سے متعین ہوتی ہے۔ HORIZONTAL کے لیے اس کا الٹ ہے: اونچائی والد کے برابر، چوڑائی مواد کے مطابق۔ اگر HORIZONTAL قطار میں عناصر کی کل چوڑائی والد کی چوڑائی سے تجاوز کر جائے تو عناصر اسکرین سے باہر نکل سکتے ہیں (اگر weight استعمال نہ کیا جائے)۔

اندرونی ساخت

LinearLayout ViewGroup سے onMeasure اور onLayout کو اوور رائڈ کرتا ہے۔ VERTICAL رخ کے ساتھ، onLayout Y محور کے ساتھ عناصر رکھتا ہے: پہلا چائلڈ — y=0، دوسرا — y=prev.bottom + divider.hidden، وغیرہ۔ HORIZONTAL کے ساتھ — X محور کے ساتھ۔ تقسیم کار android:divider اور android:showDividers (beginning, middle, end) کے ذریعے مقرر کیا جاتا ہے۔ تقسیم کار ایک رنگ، drawable یا حسب ضرورت Shape وسائل ہو سکتا ہے۔

رخ اور Gravity: VERTICAL اور HORIZONTAL

رخ — چائلڈ عناصر کی جگہ کا تعین کرنے کی سمت متعین کرنے والی LinearLayout کی ایک اہم خصوصیت ہے۔ android:orientation="vertical" عناصر کو اوپر سے نیچے ترتیب دیتا ہے؛ android:orientation="horizontal" — بائیں سے دائیں (یا RTL لوکلائزیشن کے ساتھ دائیں سے بائیں)۔ اگر رخ مقرر نہ کیا جائے تو ڈیفالٹ طور پر HORIZONTAL استعمال ہوتا ہے (پرانے ورژنز پر) — لیکن پیش گوئی کے قابل رویے کے لیے واضح تصریح ضروری ہے۔

android:gravity — LinearLayout کے اندر مواد کو سیدھ میں لاتا ہے۔ امتزاج قبول کرتا ہے: top, bottom, left, right, center, center_horizontal, center_vertical, fill, clip_vertical, clip_horizontal۔ VERTICAL لے آؤٹ کے لیے gravity="center" کی قدر تمام عناصر کو افقی طور پر مرکز میں رکھے گی۔ android:layout_gravity — ایک چائلڈ عنصر کی خصوصیت جو اسے والد LinearLayout کے اندر سیدھ میں لاتی ہے۔ مثال: VERTICAL لے آؤٹ میں layout_gravity="right" والا بٹن بٹن کو دائیں کنارے پر دھکیل دے گا۔

فرق: gravity — والد کی خاصیت (اس کے اندر بچے کیسے ترتیب دیئے جاتے ہیں)، layout_gravity — بچے کی خاصیت (وہ والد کے اندر کیسے برتاؤ کرتا ہے)۔ ان خصوصیات کو گڈمڈ کرنا ابتدائی افراد کی سب سے عام غلطیوں میں سے ایک ہے۔

بنیاد لائن سیدھ

متن کے عناصر (TextView, Button, EditText) والے HORIZONTAL لے آؤٹ کے لیے، android:baselineAligned="true" مفید ہے — یہ تمام متن کو پیڈنگ، سائز یا اونچائی سے قطع نظر فونٹ کی بنیاد لائن کے ذریعے سیدھ میں لاتا ہے۔ یہ ایک آئیکن، عنوان اور وضاحت والی قطار کو بصری طور پر صاف ستھرا بناتا ہے: متن اوپر نیچے نہیں اچھلتا۔

layout_weight: وزن کی تقسیم

layout_weight — LinearLayout کے چائلڈ عنصر کی ایک خصوصیت جو متعین کرتی ہے کہ یہ خالی جگہ کا کتنا حصہ لے گا۔ یہ صرف رخ کی سمت میں کام کرتا ہے (HORIZONTAL کے لیے چوڑائی، VERTICAL کے لیے اونچائی)۔ حساب کا فارمولا: سائز = اپنا سائز + (خالی جگہ × (عنصر کا وزن / تمام وزن کا مجموعہ))۔ خالی جگہ = والد کا سائز — تمام بچوں کے اپنے سائز کا مجموعہ۔

layout_weight انکولی انٹرفیس کے لیے مقررہ سائز سے زیادہ کارآمد ہے۔ مثال کے طور پر، اگر بائیں پینل کو اسکرین کا 30% اور دائیں کو 70% گھیرنا چاہیے، تو weight=3 اور weight=7 مقرر کریں۔ درست آپریشن کے لیے، سمت میں سائز عام طور پر 0dp مقرر کیا جاتا ہے (HORIZONTAL کے لیے android:layout_width="0dp")، پھر عنصر کا اپنا سائز صفر سمجھا جاتا ہے، اور پورا سائز صرف weight سے متعین ہوتا ہے۔ یہ Google کی معیاری سفارش ہے (Android Developers Guide, 2024)۔

اہم: وزن LinearLayout میں تمام عناصر کے لیے جمع کیے جاتے ہیں، بشمول وہ جن کا weight مقرر نہیں (ان کا وزن 0 سمجھا جاتا ہے)۔ اگر ایک عنصر کا weight=1 اور دوسرے کا weight=2 ہے، تو پہلا خالی جگہ کا 1/3 لے گا، دوسرا — 2/3۔ weightSum (والد کی ایک خصوصیت) زیادہ سے زیادہ وزن کا مجموعہ مقرر کرنے کی اجازت دیتی ہے — اگر بچوں کے وزن کا مجموعہ weightSum سے کم ہے، تو فرق خالی جگہ رہتا ہے۔

کوڈ کی مثالیں: XML لے آؤٹ

مثال 1: Weight کے ساتھ عمودی فارم

لاگ ان فارم تین عناصر پر مشتمل ہے: ای میل فیلڈ (اسکرین کی اونچائی کا 2/4 گھیرتا ہے)، پاس ورڈ فیلڈ (1/4) اور بٹن (1/4)۔ Weight والے تینوں عناصر صرف VERTICAL رخ میں اونچائی کے لحاظ سے کام کرتے ہیں۔

xml
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="16dp">

    <EditText
        android:id="@+id/email"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="2"
        android:hint="Email" />

    <EditText
        android:id="@+id/password"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:hint="پاس ورڈ"
        android:inputType="textPassword" />

    <Button
        android:id="@+id/login_button"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:text="لاگ ان کریں" />

</LinearLayout>

ہر عنصر کی اونچائی = (parent_height — padding) × (weight / sumWeights)۔ email اونچائی کا 2/4 حاصل کرتا ہے، پاس ورڈ اور بٹن — ہر ایک 1/4۔ سب height=0dp، اس لیے اپنا سائز نہیں سمجھا جاتا — صرف weight کام کرتا ہے۔

مثال 2: افقی ٹول بار

تین بٹنوں والا پینل: واپسی کا آئیکن (wrap_content)، عنوان (باقی بھرنا) اور مینیو آئیکن (wrap_content)۔ عنوان کے لیے weight=1، بٹن Weight کے بغیر۔

xml
<LinearLayout
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="56dp"
    android:gravity="center_vertical">

    <ImageButton
        android:id="@+id/btn_back"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/ic_arrow_back" />

    <TextView
        android:id="@+id/toolbar_title"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="عنوان"
        android:textSize="18sp" />

    <ImageButton
        android:id="@+id/btn_menu"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/ic_more_vert" />

</LinearLayout>

واپسی اور مینیو بٹن آئیکن کے لیے جتنی ضرورت ہے بالکل اتنی جگہ لیتے ہیں۔ width=0dp اور weight=1 والا عنوان (TextView) ان کے درمیان باقی تمام جگہ پر پھیل جاتا ہے۔ gravity="center_vertical" تمام عناصر کو عمودی طور پر مرکز میں رکھتا ہے۔

مثال 3: پیچیدہ کارڈ کے لیے گھریلا LinearLayout

ایک پروڈکٹ کارڈ: افقی قطار (تصویر + عمودی متن کا بلاک)۔ بیرونی LinearLayout HORIZONTAL، اندرونی — عنوان، وضاحت اور قیمت کے لیے VERTICAL۔

xml
<LinearLayout
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:padding="8dp">

    <ImageView
        android:layout_width="80dp"
        android:layout_height="80dp"
        android:src="@drawable/product_image"
        android:scaleType="centerCrop" />

    <LinearLayout
        android:orientation="vertical"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:layout_marginStart="12dp">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="مصنوعات کا نام"
            android:textStyle="bold"
            android:textSize="16sp" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="دو سطروں میں مختصر مصنوعات کی وضاحت"
            android:textSize="14sp"
            android:textColor="@color/gray" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="1,299 RUB"
            android:textSize="18sp"
            android:textColor="@color/accent" />

    </LinearLayout>

</LinearLayout>

بائیں طرف تصویر (80×80dp)، دائیں طرف — تین متن کی سطروں کا عمودی بلاک۔ اندرونی LinearLayout کا weight=1 ہے، اس لیے یہ تصویر کے بعد باقی تمام جگہ گھیرتا ہے۔ یہ ایک کلاسک فہرست کارڈ پیٹرن ہے جو ہزاروں ایپس میں ملتا ہے۔

گھریلو پن کا مسئلہ اور متبادل

LinearLayout کی اہم خامی — پیچیدہ لے آؤٹ کے لیے گھریلے کنٹینرز کی ضرورت۔ اگر آپ کو عناصر کو 2×2 گرڈ میں ترتیب دینے یا دونوں کناروں پر سیدھ کے ساتھ قطار بنانے کی ضرورت ہے، تو کم از کم 2–3 گھریلو پن کی سطحیں درکار ہیں۔ ہر LinearLayout سطح 2 onMeasure گزرنے کا اضافہ کرتی ہے، جو کمزور آلات پر رینڈرنگ کے دوران نمایاں تاخیر کا باعث بنتی ہے۔

Android Performance Blog (Google, 2017) کے مطابق، گھریلو پن کی ہر اضافی سطح لے آؤٹ کا وقت 30–50 μs بڑھاتی ہے۔ 20 آئٹمز کی فہرست کے لیے 3 گھریلو پن کی سطحوں کے ساتھ، تاخیر فی عنصر 3 ms تک پہنچ سکتی ہے — یہ اسکرول کرتے وقت نمایاں jank ہے۔ ConstraintLayout ایک چپٹی درجہ بندی کے ذریعے اس مسئلے کو حل کرتا ہے، 3–4 گھریلے LinearLayouts کو ایک واحد رکاوٹ کنٹینر سے بدل دیتا ہے۔

سفارش: سادہ لکیری لے آؤٹ (10 عناصر تک، ایک گھریلو پن کی سطح) کے لیے LinearLayout استعمال کریں۔ فہرست کارڈز، مختلف سیدھ والے فارمز اور ٹیبل ساخت والی اسکرینوں کے لیے ConstraintLayout منتخب کریں۔ RecyclerView میں بار بار آنے والے عناصر کے لیے، آئٹم لے آؤٹ فائل میں ConstraintLayout استعمال کریں — یہ اسکرول کارکردگی کے لیے اہم ہے۔

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

layout_weight کیوں کام نہیں کرتا؟

سب سے عام وجہ — سمت میں سائز 0dp پر مقرر نہیں ہے۔ HORIZONTAL لے آؤٹ کے لیے android:layout_width="0dp" ضروری ہے، VERTICAL کے لیے — android:layout_height="0dp"۔ اگر عنصر میں wrap_content یا match_parent ہے تو weight کام نہیں کر سکتا یا غیر متوقع نتائج دے سکتا ہے۔ دوسری وجہ — والد پر weightSum بچوں کے وزن کے مجموعے سے کم ہے۔ تیسری — مخالف سمت میں چائلڈ عنصر پر match_parent استعمال کرنا۔

layout_weight اور weightSum میں کیا فرق ہے؟

layout_weight ہر چائلڈ عنصر پر مقرر کیا جاتا ہے اور خالی جگہ میں اس کا حصہ متعین کرتا ہے۔ weightSum — والد LinearLayout کی ایک خصوصیت جو زیادہ سے زیادہ وزن کا مجموعہ مقرر کرتی ہے۔ ڈیفالٹ طور پر، weightSum = تمام بچوں کے layout_weight کا مجموعہ۔ اگر آپ weightSum = 3 مقرر کرتے ہیں اور بچوں کا weight=1 ہے، تو ہر ایک 1/3 گھیرے گا۔ اگر weight=1 والے صرف دو بچے ہیں، تو بقیہ 1/3 خالی ہوگا۔ weightSum عناصر شامل کرتے/ہٹاتے وقت دوبارہ گنتی کے بغیر تناسب مقرر کرنے کے لیے آسان ہے۔

LinearLayout عناصر کے درمیان فاصلے کیسے ہٹائیں؟

ڈیفالٹ طور پر کوئی فاصلہ نہیں — عناصر ایک دوسرے سے مل کر رکھے جاتے ہیں۔ اگر فاصلہ نظر آئے تو جانچ کریں: والد پر android:divider اور android:showDividers، چائلڈ عناصر پر android:layout_margin۔ اضافی طور پر، android:weightSum اثر انداز ہو سکتا ہے — اگر عناصر weight استعمال کرتے ہیں تو غلط حساب کی وجہ سے ان کے درمیان خالی جگہ رہ سکتی ہے۔ صفر فاصلے کے لیے، تمام چائلڈ مارجن 0dp مقرر کریں اور تقسیم کار ہٹا دیں۔

کون تیز ہے: LinearLayout یا ConstraintLayout؟

سادہ یک سمتی لے آؤٹ (ایک قطار/کالم میں 1–5 عناصر) کے لیے LinearLayout تھوڑا تیز ہے — یہ رکاوٹوں کے حساب پر وسائل خرچ نہیں کرتا۔ پیچیدہ لے آؤٹ (5 سے زیادہ عناصر، گرڈز، مختلف سیدھ کی اقسام) کے لیے ConstraintLayout تیز ہے کیونکہ یہ گھریلے LinearLayouts کے بجائے ایک چپٹی درجہ بندی استعمال کرتا ہے۔ Google ٹیسٹ (Android Performance Blog) کے مطابق، ConstraintLayout ان لے آؤٹ پر جیتتا ہے جن میں 3+ سطحوں کے LinearLayout گھریلو پن کی ضرورت ہوتی ہے۔

خلاصہ

  • LinearLayout — عناصر کو عمودی یا افقی طور پر ترتیب وار رکھنے کے لیے ایک بنیادی Android ViewGroup۔
  • رخ — android:orientation="vertical" (کالم) یا "horizontal" (قطار) لے آؤٹ کی سمت متعین کرتا ہے۔
  • layout_weight — 0dp پر مقرر کردہ سائز والے عناصر کے وزن کے تناسب سے خالی جگہ تقسیم کرنے کا طریقہ کار۔
  • Gravity — android:gravity (والد کے اندر بچوں کی سیدھ) بمقابلہ android:layout_gravity (والد میں بچے کی سیدھ)۔
  • گھریلو پن — اہم خامی: پیچیدہ لے آؤٹ کے لیے 2–3 سطحیں درکار ہیں، جو رینڈرنگ کو ہر سطح پر 30–50 μs سست کرتی ہیں۔
  • انتخاب — سادہ قطاروں/کالموں (10 عناصر تک) کے لیے LinearLayout، پیچیدہ لے آؤٹ کے لیے ConstraintLayout۔
  • موافقت — weight + 0dp + baseline alignment کا مجموعہ 80% لکیری لے آؤٹ کاموں کو احاطہ کرتا ہے۔

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

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

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

مزید پڑھیں