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 डेवलपर साक्षात्कार और वास्तविक कोड समीक्षाओं में सबसे आम विषयों में से एक है। दोनों इकाइयाँ घनत्व-स्वतंत्र पिक्सेल (160 dpi = 1 dp = 1 px mdpi स्क्रीन पर) से बंधी हैं, लेकिन सिस्टम फ़ॉन्ट आकार बदलने पर अलग व्यवहार करती हैं।

विशेषता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 से सीधा गुणा कम विश्वसनीय है क्योंकि यह किनारे के मामलों (शून्य मान, ओवरफ़्लो) को संभालता नहीं है। scaledDensity तब बदलता है जब Settings > Display > Font size के माध्यम से फ़ॉन्ट सेटिंग्स संशोधित की जाती हैं।

स्केलिंग फ़ैक्टर

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 एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।

परियोजना पर चर्चा करें

यह भी पढ़ें