sp: یہ کیا ہے، Android میں متن کے لیے قابل توسیع پکسلز

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

sp — Scale-independent Pixels، Android میں متن کی پیمائش کی اکائی جو ڈیوائس کی فونٹ سائز سیٹنگز کو مدنظر رکھتی ہے۔ dp کے برعکس، sp سسٹم فونٹ سائز کے ساتھ اسکیل ہوتا ہے، انٹرفیس کی رسائی کو یقینی بناتا ہے۔ یہ مضمون sp اور dp کے درمیان فرق کی وضاحت کرتا ہے، XML اور Kotlin میں textSize سیٹ کرنے کا طریقہ دکھاتا ہے، اور Android میں نوع نگاری کے ساتھ کام کرنے کے بہترین طریقوں سے پردہ اٹھاتا ہے۔

اہم نکات

  • sp — متن کی اکائی جو صارف کی سسٹم فونٹ سیٹنگز کے مطابق اسکیل ہوتی ہے
  • dp — عناصر کے طول و عرض کی اکائی، فونٹ سائز کی تبدیلی پر ردعمل نہیں دیتی
  • sp اور dp میں فرق: sp = dp × scaleFactor، جہاں scaleFactor فونٹ سیٹنگز پر منحصر ہے
  • XML میں textSize sp کے ذریعے سیٹ کیا جاتا ہے: android:textSize="16sp"
  • Material Design سرخیوں کے لیے 12sp سے 34sp تک نوع نگاری کی حدود تجویز کرتا ہے

Android میں sp کیا ہے؟

sp (scale-independent pixel) — Android میں فونٹ سائز پیمائش کی اکائی جو صارف کے سسٹم سیٹنگز کے مطابق خود بخود اسکیل ہوتی ہے۔ جب ڈیوائس کا مالک سیٹنگز میں فونٹ سائز بڑھاتا ہے، تو sp اقدار والے تمام عناصر متناسب طور پر بڑھتے ہیں۔ یہ بصارت سے محروم افراد کے لیے انٹرفیس کی رسائی کو یقینی بناتا ہے۔

بنیادی تناسب: معیاری فونٹ اسکیل 1.0 (معمول) پر 1 sp = 1 dp۔ اگر صارف فونٹ کو بڑا (1.15×) سیٹ کرتا ہے، تو 16 sp 18.4 فزیکل پکسلز بن جاتا ہے۔ چھوٹے فونٹ سائز (0.85×) پر، وہی 16 sp 13.6 px بن جاتا ہے۔ اسکیلنگ میکانزم Android Framework سطح پر Settings.System.FONT_SCALE کے ذریعے منظم کیا جاتا ہے۔

Google Material Design رہنما اصولوں کے مطابق، متن کو خصوصی طور پر sp میں متعین کیا جانا چاہیے۔ مستثنیٰ ان اجزاء میں فکسڈ لیبل ہیں جہاں سائز ترتیب کے لیے اہم ہے (مثلاً، فکسڈ اونچائی والے بٹنوں کے اندر متن)۔ ایسے معاملات میں، دستی رسائی کنٹرول کے ساتھ dp استعمال کرنے کی سفارش کی جاتی ہے۔

sp بمقابلہ dp: کلیدی فرق

sp اور dp کے درمیان فرق Android ڈویلپر انٹرویوز اور حقیقی کوڈ جائزوں میں سب سے عام موضوعات میں سے ایک ہے۔ دونوں اکائیاں کثافت سے آزاد پکسلز (mdpi اسکرینوں پر 160 dpi = 1 dp = 1 px) سے منسلک ہیں، لیکن سسٹم فونٹ سائز تبدیل ہونے پر مختلف طریقے سے برتاؤ کرتی ہیں۔

خصوصیتspdp
مقصدمتن کا سائزعناصر کے طول و عرض، پیڈنگ، چوڑائی، اونچائی
فونٹ اسکیلنگہاں (اسکیل فیکٹر)نہیں
کثافت اسکیلنگہاںہاں
سیٹنگ APIandroid:textSizeandroid:layout_width, layout_height, padding, margin
Material Design Tokentypescalespacing, sizing

عملی طور پر، ایک عام غلطی متن کے لیے dp کا استعمال ہے۔ اگر متن dp میں سیٹ کیا جائے تو یہ فونٹ سائز بڑھنے پر اسکیل نہیں ہوتا، جس سے کمزور بصارت والے صارفین کے لیے انٹرفیس ناقابل رسائی ہو جاتا ہے۔ الٹی غلطی بٹن کی اونچائی یا پیڈنگ کے لیے sp کا استعمال ہے: فونٹ بڑھنے پر بٹن "پھول" سکتا ہے، ترتیب کو توڑ سکتا ہے۔

sp اسکیلنگ کیسے کام کرتی ہے

sp اسکیلنگ Android Framework سطح پر TypedValue کلاس میں لاگو کی گئی ہے۔ تبدیلی کا فارمولا: sp = dp × scaledDensity، جہاں scaledDensity ایک اسکیلنگ فیکٹر ہے جو اسکرین کثافت اور صارف کی فونٹ سائز سیٹنگ دونوں کو مدنظر رکھتا ہے۔

kotlin
// Kotlin میں scaledDensity کا پروگراماتی حصول
val scaledDensity = with(context.resources) {
    displayMetrics.scaledDensity
}

// sp کو px میں تبدیل کرنا
fun spToPx(sp: Float, context: Context): Float {
    return TypedValue.applyDimension(
        TypedValue.COMPLEX_UNIT_SP,
        sp,
        context.resources.displayMetrics
    )
}

// px کو sp میں تبدیل کرنا
fun pxToSp(px: Float, context: Context): Float {
    return px / context.resources.displayMetrics.scaledDensity
}

TypedValue.applyDimension طریقہ رن ٹائم پر sp کو پکسلز میں تبدیل کرنے کا واحد صحیح طریقہ ہے۔ scaledDensity سے براہ راست ضرب کم قابل اعتماد ہے کیونکہ یہ کنارے کی صورتوں (صفر اقدار، اوور فلو) کو نہیں سنبھالتا۔ Settings > Display > Font size کے ذریعے فونٹ سیٹنگز تبدیل کرنے پر scaledDensity بدل جاتا ہے۔

اسکیل فیکٹرز

Android پانچ پہلے سے طے شدہ فونٹ اسکیل لیول فراہم کرتا ہے: چھوٹا (0.85×)، ڈیفالٹ (1.0×)، بڑا (1.15×)، سب سے بڑا (1.3×) اور Android 14+ میں ایک اضافی بہت بڑا لیول (>1.3×)۔ ڈیوائس مینوفیکچررز (Samsung, Xiaomi) اپنے لیول شامل کرتے ہیں — 2.0× تک۔ sp میں کم سے کم متن کا سائز کبھی بھی مقررہ پکسلز کی تعداد کی ضمانت نہیں دیتا۔

XML میں sp کا استعمال

XML لے آؤٹ میں، sp خصوصی طور پر android:textSize وصف میں استعمال ہوتا ہے۔ دیگر تمام جہتیں — چوڑائی، اونچائی، پیڈنگ، مارجن، ایلیویشن — dp میں سیٹ کی جاتی ہیں۔ اصول آسان ہے: اگر عنصر متن دکھاتا ہے، تو اس کا سائز sp میں؛ اگر عنصر جیومیٹری کی وضاحت کرتا ہے، تو سائز dp میں۔

XML میں textSize کی بنیادی مثال

xml
<!-- sp میں textSize کے ساتھ TextView لے آؤٹ -->
<TextView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="@string/hello"
    android:textSize="16sp"
    android:padding="12dp"
    android:lineSpacingExtra="4dp" />

<!-- dimens وسائل کا استعمال -->
<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textSize="@dimen/text_body_large" />

متن کے سائز کو dimens.xml فائل میں نکالنے کی سفارش کی جاتی ہے۔ یہ نوع نگاری کی دیکھ بھال کو آسان بناتا ہے، مختلف اسکرین کنفیگریشنز کے لیے سائز کو اوور رائڈ کرنے کی اجازت دیتا ہے، اور پوری ایپلیکیشن میں مستقل مزاجی کو یقینی بناتا ہے۔

نوع نگاری ٹوکن کے ساتھ dimens.xml

xml
<!-- res/values/dimens.xml -->
<resources>
    <!-- Material Design Type Scale -->
    <dimen name="text_display_large">34sp</dimen>
    <dimen name="text_display_medium">28sp</dimen>
    <dimen name="text_headline_large">24sp</dimen>
    <dimen name="text_headline_medium">20sp</dimen>
    <dimen name="text_title_large">18sp</dimen>
    <dimen name="text_body_large">16sp</dimen>
    <dimen name="text_body_medium">14sp</dimen>
    <dimen name="text_label_large">14sp</dimen>
    <dimen name="text_label_small">11sp</dimen>
</resources>

Material Design Type Scale میں 13 سائز لیول شامل ہیں — چھوٹے لیبلز کے لیے 11sp سے لے کر بڑے ڈسپلے سرخیوں کے لیے 57sp تک۔ Android پروجیکٹس عام طور پر 8–10 لیول استعمال کرتے ہیں۔ تمام اقدار 1sp کے ضرب ہونے چاہئیں — کسری اقدار (15.5sp) سب پکسل پوزیشننگ کی وجہ سے رینڈرنگ کو خراب کرتی ہیں۔

Kotlin کے ذریعے نوع نگاری ترتیب دینا

جدید Android ڈیویلپمنٹ میں، متن شاذ و نادر ہی sp میں textSize کے ذریعے براہ راست سیٹ کیا جاتا ہے۔ اس کے بجائے، MaterialTheme.typography سسٹم استعمال کیا جاتا ہے، جہاں ہر اسٹائل پہلے سے طے شدہ ہے اور اس میں سائز، وزن، لائن اونچائی اور حرف فاصلہ شامل ہے۔

kotlin
// Typography API کے ذریعے کسٹم نوع نگاری
val AppTypography = Typography(
    displayLarge = TextStyle(
        fontWeight = FontWeight.Normal,
        fontSize = 34.sp,
        lineHeight = 40.sp,
        letterSpacing = 0.sp
    ),
    headlineLarge = TextStyle(
        fontWeight = FontWeight.SemiBold,
        fontSize = 24.sp,
        lineHeight = 32.sp
    ),
    titleLarge = TextStyle(
        fontWeight = FontWeight.Medium,
        fontSize = 18.sp,
        lineHeight = 24.sp
    ),
    bodyLarge = TextStyle(
        fontWeight = FontWeight.Normal,
        fontSize = 16.sp,
        lineHeight = 24.sp,
        letterSpacing = 0.5.sp
    ),
    labelSmall = TextStyle(
        fontWeight = FontWeight.Medium,
        fontSize = 11.sp,
        lineHeight = 16.sp,
        letterSpacing = 0.5.sp
    )
)

Jetpack Compose میں توسیعی فنکشن .sp خود بخود اسکیل سے آزاد پکسلز میں ترجمہ ہو جاتا ہے۔ جب سسٹم فونٹ سائز تبدیل ہوتا ہے، Compose نئی scaledDensity کے مطابق fontSize، lineHeight اور spacing کا دوبارہ حساب لگاتا ہے۔ TextUnit (sp کی نمائندگی کرنے والی کلاس) ضمانت دیتی ہے کہ متن اسکیل ہوتا ہے جبکہ پیڈنگ نہیں ہوتی۔

Jetpack Compose میں sp

Jetpack Compose میں، sp کو TextUnit قسم سے ظاہر کیا جاتا ہے، جسے غلطی سے عناصر کے طول و عرض کے لیے استعمال نہیں کیا جا سکتا۔ Kotlin کمپائلر ایک خرابی دے گا اگر TextUnit وہاں پاس کیا جائے جہاں Dp متوقع ہو۔ یہ غلط اسکیلنگ سے متعلق بگز کی پوری کلاس کو ختم کرتا ہے۔

kotlin
// Compose میں TextUnit — sp کے ساتھ محفوظ کام
@Composable
fun ArticleCard(title: String, description: String) {
    Card(modifier = Modifier
        .fillMaxWidth()
        .padding(16.dp)
    ) {
        Text(
            text = title,
            style = MaterialTheme.typography.titleLarge
        )
        Spacer(modifier = Modifier.height(8.dp))
        Text(
            text = description,
            style = MaterialTheme.typography.bodyMedium
        )
    }
}

// sp میں fontSize واضح طور پر سیٹ کرنا
Text(
    text = "کسٹم سائز",
    fontSize = 20.sp,
    fontWeight = FontWeight.Bold,
    color = MaterialTheme.colorScheme.primary
)

Compose میں XML وصف android:textSize کا کوئی براہ راست مساوی نہیں ہے — متن کا سائز TextStyle.fontSize کے ذریعے سیٹ کیا جاتا ہے۔ MaterialTheme.typography سسٹم پہلے سے طے شدہ اسٹائل فراہم کرتا ہے جو Material Design Type Scale سے مطابقت رکھتے ہیں۔ اگر کسٹم سائز کی ضرورت ہو تو 20.sp لفظی استعمال کیا جاتا ہے — زبان ضمانت دیتی ہے کہ یہ TextUnit ہے، Dp نہیں۔

sp کے ساتھ کام کرنے کے بہترین طریقے

sp کا صحیح استعمال ایک قابل رسائی Android ایپلیکیشن کی بنیاد ہے۔ ذیل میں Google Material Design اور Android Developers Guide کی سفارشات پر مبنی اصول ہیں۔

  • متن کے لیے ہمیشہ sp استعمال کریں — textSize کو کبھی dp یا px میں سیٹ نہ کریں، ورنہ بڑے فونٹ والے صارفین انٹرفیس نہیں پڑھ سکیں گے
  • کنٹینرز کے لیے dp استعمال کریں — بٹن کی اونچائی، پیڈنگ اور کارڈ کی چوڑائی dp میں ہونی چاہیے، ورنہ بڑے فونٹ پر عناصر اوورلیپ ہو سکتے ہیں
  • سائز کو dimens.xml میں نکالیں — نوع نگاری ٹوکن کا مرکزی ذخیرہ ری فیکٹرنگ اور ڈارک تھیم سپورٹ کو آسان بناتا ہے
  • 12sp سے چھوٹا sp استعمال نہ کریں — چھوٹا متن ہائی PPI والے آلات اور معیاری فونٹ سائز پر ناقابل مطالعہ ہو جاتا ہے
  • زیادہ سے زیادہ فونٹ اسکیل پر ٹیسٹ کریں — ڈیوائس سیٹنگز میں سب سے بڑا فونٹ فعال کریں اور تصدیق کریں کہ انٹرفیس نہیں ٹوٹتا

رسائی کا بنیادی اصول: صارف کو فعالیت کھونے کے بغیر فونٹ سائز بڑھانے کے قابل ہونا چاہیے۔ اگر ایپلیکیشن 1.3× کے فونٹ اسکیل پر صحیح طریقے سے کام کرتی ہے، تو یہ بنیادی رسائی ٹیسٹ پاس کرے گی۔ Google Play ایپلیکیشن کو مسترد کر سکتا ہے اگر textSize dp میں سیٹ کیا گیا ہو اور انٹرفیس اسکیل نہ ہو۔

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

sp dp سے کیسے مختلف ہے؟

sp (scale-independent pixel) سسٹم فونٹ سائز تبدیل ہونے پر اسکیل ہوتا ہے، جبکہ dp نہیں ہوتا۔ sp صرف متن کے لیے استعمال ہوتا ہے، dp دیگر تمام عناصر کے طول و عرض کے لیے۔ تبدیلی کا عنصر: sp = dp × FONT_SCALE۔

کیا پیڈنگ کے لیے sp استعمال کیا جا سکتا ہے؟

نہیں۔ پیڈنگ، بٹن کی اونچائی اور کارڈ کی چوڑائی dp میں سیٹ کی جانی چاہیے۔ پیڈنگ کے لیے sp استعمال کرنے سے فونٹ بڑھنے پر عناصر غیر فطری طور پر بڑھتے ہیں اور اسکرین کی حدود سے باہر جا سکتے ہیں۔

کیسے تصدیق کریں کہ ایپ sp کے ساتھ صحیح کام کرتی ہے؟

Settings > Display > Font size کھولیں اور زیادہ سے زیادہ قیمت (Largest) سیٹ کریں۔ ایپلیکیشن لانچ کریں اور چیک کریں کہ تمام متن پڑھنے کے قابل ہے، عناصر اوورلیپ نہیں ہوتے، اور بٹن اسکرین کی حدود سے باہر نہیں جاتے۔ آٹومیشن کے لیے UiAutomator کے ساتھ Espresso استعمال کریں۔

sp میں کم سے کم قابل اجازت متن کا سائز کیا ہے؟

Material Design labelSmall کے لیے کم سے کم سائز 11sp تجویز کرتا ہے۔ باڈی متن کے لیے — 14sp (bodyMedium) سے 16sp (bodyLarge) تک۔ 11sp سے چھوٹے سائز کی سفارش نہیں کی جاتی کیونکہ یہ زیادہ پکسل کثافت والے آلات پر ناقابل مطالعہ ہو جاتے ہیں۔

اگر textSize dp میں سیٹ کیا جائے تو کیا ہوگا؟

متن سسٹم فونٹ سیٹنگز سے قطع نظر مقررہ سائز میں دکھایا جائے گا۔ بڑے فونٹ والے صارفین اس متن کو آرام سے نہیں پڑھ سکیں گے۔ یہ WCAG رسائی کی ضروریات کی خلاف ورزی کرتا ہے اور Google Play سے ایپلیکیشن کو مسترد کرنے کا سبب بن سکتا ہے۔

خلاصہ

  • sp — Android میں فونٹ پیمائش کی اکائی جو FONT_SCALE کے ذریعے صارف کی سیٹنگز کے ساتھ اسکیل ہوتی ہے
  • dp — عناصر کے طول و عرض کی اکائی جو فونٹ سائز کی تبدیلیوں پر ردعمل نہیں دیتی
  • textSize XML میں android:textSize="16sp" کے ذریعے سیٹ کیا جاتا ہے، دیگر تمام جہتیں dp میں
  • MaterialTheme.typography Jetpack Compose میں قسم کی حفاظت کے لیے TextUnit (.sp) استعمال کرتا ہے
  • dimens.xml — مستقل مزاجی کے لیے نوع نگاری ٹوکن کا مرکزی ذخیرہ
  • کم سے کم سائز متن کے لیے — 11sp، باڈی کے لیے تجویز کردہ — 14–16sp
  • ٹیسٹ زیادہ سے زیادہ فونٹ اسکیل پر — رسائی کی تصدیق کے لیے ایک لازمی مرحلہ

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

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

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

مزید پڑھیں