sp: bu nədir, Android-də mətn üçün miqyaslana bilən piksellər

Müəllif: IT Sectr Dərc olunub: 2026-02-25 Oxuma vaxtı: 9 dəq

sp — Scale-independent Pixels, Android-də mətn ölçüsü vahidi, cihazdaki şrift ölçüsü parametrlərini nəzərə alır. dp-dən fərqli olaraq, sp sistem şrift ölçüsü ilə birlikdə miqyaslanır, interfeyslərin əlçatanlığını təmin edir. Məqalə sp və dp arasındakı fərqi izah edir, XML və Kotlin-də textSize konfiqurasiyasını göstərir, həmçinin Android-də tipoqrafiya ilə işin ən yaxşı təcrübələrini açıqlayır.

Əsas

  • sp — mətn üçün vahid, istifadəçinin sistem şrift parametrlərinə uyğun miqyaslanır
  • dp — element ölçüləri üçün vahid, şrift ölçüsünün dəyişməsinə reaksiya vermir
  • sp və dp fərqi: sp = dp × scaleFactor, scaleFactor şrift parametrlərindən asılıdır
  • XML-də textSize sp vasitəsilə təyin edilir: android:textSize="16sp"
  • Material Design başlıqlar üçün 12sp-dən 34sp-ə qədər tipoqrafiya addımını tövsiyə edir

Android-də sp nədir?

sp (scale-independent pixel) — Android-də şrift ölçüsü vahidi, avtomatik olaraq istifadəçinin sistem parametrlərinə uyğun miqyaslanır. Cihaz sahibi parametrlərdə şrift ölçüsünü artırdıqda, sp dəyərləri olan bütün elementlər mütənasib şəkildə böyüyür. Bu, zəif görmə qabiliyyəti olan insanlar üçün interfeysin əlçatanlığını təmin edir.

Əsas nisbət: 1 sp = 1 dp standart şrift miqyası 1.0 (normal) olduqda. İstifadəçi Large (1.15×) şriftini təyin edərsə, 16 sp 18.4 fiziki pikselə çevrilir. Small (0.85×) şrift ölçüsündə eyni 16 sp 13.6 px olacaq. Miqyaslama mexanizmi Android Framework səviyyəsində Settings.System.FONT_SCALE vasitəsilə idarə olunur.

Google Material Design Guidelines-ə görə, mətn yalnız sp ilə təyin edilməlidir. İstisna — ölçüsünün komponent düzülüşü üçün kritik olduğu sabit etiketlərdir (məsələn, sabit hündürlükdə düymələrin içindəki mətn). Belə hallarda əlçatanlığın əl ilə idarə olunması ilə dp istifadə etmək tövsiyə olunur.

sp vs dp: əsas fərqlər

spdp arasındakı fərq — Android developerləri üçün müsahibələrdə və real code review-lərdə ən çox rast gəlinən suallardan biridir. Hər iki vahid density-independent pikselə bağlıdır (160 dpi = 1 dp = 1 px mdpi ekranda), lakin sistem şrift ölçüsü dəyişdikdə fərqli davranır.

Xüsusiyyətspdp
TəyinatMətn ölçüsüElement ölçüləri, boşluqlar, en, hündürlük
Şriftə görə miqyaslanmaBəli (scale factor)Xeyr
Sıxlığa görə miqyaslanmaBəliBəli
Quraşdırma üçün APIandroid:textSizeandroid:layout_width, layout_height, padding, margin
Material Design Tokentypescalespacing, sizing

Praktikada səhv — mətn üçün dp istifadə etməkdir. Əgər mətn dp ilə təyin edilibsə, şrift artırıldıqda miqyaslanmır, bu da interfeysi zəif görmə qabiliyyəti olan istifadəçilər üçün əlçatmaz edir. Əks səhv — düymə hündürlüyü və ya boşluqlar üçün sp istifadə etməkdir: şrift artırıldıqda düymə „şişə" bilər, düzülüşü pozaraq.

sp miqyaslanması necə işləyir

sp miqyaslanması Android Framework səviyyəsində TypedValue sinfində reallaşdırılıb. Yenidən hesablama düsturu: sp = dp × scaledDensity, burada scaledDensity həm ekran sıxlığını, həm də istifadəçinin şrift parametrini nəzərə alan miqyas əmsalıdır.

kotlin
// Kotlin-də scaledDensity-in proqram əldə edilməsi
val scaledDensity = with(context.resources) {
    displayMetrics.scaledDensity
}

// sp-ni px-ə çevirmək
fun spToPx(sp: Float, context: Context): Float {
    return TypedValue.applyDimension(
        TypedValue.COMPLEX_UNIT_SP,
        sp,
        context.resources.displayMetrics
    )
}

// px-i sp-yə çevirmək
fun pxToSp(px: Float, context: Context): Float {
    return px / context.resources.displayMetrics.scaledDensity
}

TypedValue.applyDimension metodu — run-time-da sp-ni pikselə çevirməyin yeganə düzgün yoludur. scaledDensity-ə birbaşa vurma daha az etibarlıdır, çünki edge-case-ləri (sıfır dəyərlər, daşma) idarə etmir. scaledDensity Settings > Display > Font size vasitəsilə şrift parametrləri dəyişdikdə dəyişir.

Miqyaslama əmsalları

Android beş əvvəlcədən təyin edilmiş şrift miqyası səviyyəsi təqdim edir: Small (0.85×), Default (1.0×), Large (1.15×), Largest (1.3×) və Android 14+-da Very Large (>1.3×) əlavə səviyyə. Cihaz istehsalçıları (Samsung, Xiaomi) öz səviyyələrini əlavə edir — 2.0×-ə qədər. sp-də mətnin minimal ölçüsü heç vaxt sabit piksel sayına zəmanət vermir.

XML-də sp istifadəsi

XML-də sp yalnız android:textSize atributunda istifadə olunur. Bütün digər ölçülər — width, height, padding, margin, elevation — dp ilə təyin edilir. Qayda sadədir: əgər element mətn göstərirsə — ölçüsü sp, əgər element həndəsəni müəyyən edirsə — ölçüsü dp.

XML-də textSize əsas nümunəsi

xml
<!-- textSize sp ilə TextView düzülüşü -->
<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 resurslarından istifadə -->
<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textSize="@dimen/text_body_large" />

Mətn ölçülərini dimens.xml faylına çıxarmaq tövsiyə olunur. Bu, tipoqrafiyanın saxlanmasını asanlaşdırır, müxtəlif ekran konfiqurasiyaları üçün ölçüləri dəyişməyə imkan verir və bütün tətbiqdə vahidliyi təmin edir.

Tipografik tokenlərlə 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 ölçü səviyyəsi əhatə edir — kiçik etiketlər üçün 11sp-dən böyük displey başlıqları üçün 57sp-ə qədər. Android layihələri adətən 8–10 səviyyə istifadə edir. Bütün dəyərlər 1sp-ə qat olmalıdır — kəsr dəyərlər (15.5sp) subpiksel yerləşdirmə səbəbindən renderi pisləşdirir.

Kotlin vasitəsilə tipoqrafiyanın konfiqurasiyası

Müasir Android inkişafında mətn nadir hallarda sp-də textSize vasitəsilə birbaşa təyin edilir. Bunun əvəzinə hər bir stilin əvvəlcədən müəyyən edildiyi və ölçü, çəki, sətirarası boşluq və letter-spacing daxil olduğu MaterialTheme.typography sistemindən istifadə olunur.

kotlin
// Typography API vasitəsilə xüsusi tipoqrafiya
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-da .sp genişləndirmə funksiyası avtomatik olaraq scale-independent pikselə çevrilir. Sistem şrift ölçüsü dəyişdikdə Compose fontSize, lineHeight və spacing-i yeni scaledDensity-ə uyğun yenidən hesablayır. TextUnit (sp-ni təmsil edən sinif) mətnin miqyaslanmasına, boşluqların isə miqyaslanmamasına zəmanət verir.

Jetpack Compose-da sp

Jetpack Compose-da sp TextUnit tipi ilə təmsil olunur, təsadüfən element ölçüləri üçün istifadə edilə bilməz. Kotlin kompilyatoru TextUnit-in Dp gözlənilən yerə ötürülməsi halında xəta verir. Bu, yanlış miqyaslama ilə bağlı bütün səhv sinfini aradan qaldırır.

kotlin
// Compose-da TextUnit — sp ilə təhlükəsiz iş
@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
        )
    }
}

// fontSize-in sp-də açıq təyin edilməsi
Text(
    text = "Xüsusi ölçü",
    fontSize = 20.sp,
    fontWeight = FontWeight.Bold,
    color = MaterialTheme.colorScheme.primary
)

Compose-da XML android:textSize atributunun birbaşa ekvivalenti yoxdur — mətn ölçüsü TextStyle.fontSize vasitəsilə təyin edilir. MaterialTheme.typography sistemi Material Design Type Scale-ə uyğun gələn əvvəlcədən müəyyən edilmiş stillər təqdim edir. Xüsusi ölçü lazım olduqda 20.sp literallı istifadə olunur — dil bunun TextUnit olduğuna, Dp olmadığına zəmanət verir.

sp ilə işin ən yaxşı təcrübələri

sp-nin düzgün istifadəsi — əlçatan Android tətbiqinin əsasıdır. Aşağıda Google Material Design və Android Developers Guide tövsiyələrinə əsaslanan qaydalar toplanıb.

  • Mətn üçün həmişə sp istifadə edin — heç vaxt textSize-i dp və ya px ilə təyin etməyin, əks halda böyüdülmüş şrifti olan istifadəçilər interfeysi oxuya bilməyəcək
  • Konteynerlər üçün dp istifadə edin — düymələrin hündürlüyü, boşluqlar və kartların eni dp-də olmalıdır, əks halda böyük şriftdə elementlər üst-üstə düşə bilər
  • Ölçüləri dimens.xml-ə çıxarın — tipoqrafik tokenlərin mərkəzləşdirilmiş saxlanması refaktorinqi və qaranlıq mövzu dəstəyini asanlaşdırır
  • 12sp-dən kiçik sp istifadə etməyin — daha kiçik ölçülü mətn yüksək PPI olan cihazlarda və standart şriftdə oxunmaz olur
  • Maksimum şrift miqyasında test edin — cihaz parametrlərində ən böyük şrifti yandırın və interfeysin pozulmadığını yoxlayın

Əlçatanlığın əsas qaydası: istifadəçi funksionallığı itirmədən şrifti artırmaq imkanına malik olmalıdır. Tətbiq 1.3× şrift miqyasında düzgün işləyirsə, əsas əlçatanlıq testlərindən keçəcək. Google Play textSize dp-də təyin edilibsə və interfeys miqyaslanmırsa, tətbiqi rədd edə bilər.

Tez-tez verilən suallar

sp dp-dən nə ilə fərqlənir?

sp (scale-independent pixel) sistem şrift ölçüsü dəyişdikdə miqyaslanır, dp isə — yox. sp yalnız mətn üçün, dp — elementlərin bütün digər ölçüləri üçün istifadə olunur. Yenidən hesablama əmsalı: sp = dp × FONT_SCALE.

Boşluqlar üçün sp istifadə etmək olar?

Xeyr. Boşluqlar, düymə hündürlüyü, kartların eni dp ilə təyin edilməlidir. Boşluqlar üçün sp istifadə etdikdə şrift artırıldıqda elementlər qeyri-təbii böyüyür və ekran sərhədlərindən kənara çıxa bilər.

Tətbiqin sp ilə düzgün işlədiyini necə yoxlamaq olar?

Settings > Display > Font size açın və maksimum dəyəri (Largest) qoyun. Tətbiqi işə salın və bütün mətnin oxunaqlı olduğunu, elementlərin üst-üstə düşmədiyini və düymələrin ekran sərhədlərindən kənara çıxmadığını yoxlayın. Avtomatlaşdırma üçün Espresso-nu UiAutomator ilə istifadə edin.

sp-də minimum icazə verilən mətn ölçüsü nədir?

Material Design labelSmall üçün minimum ölçü 11sp tövsiyə edir. Əsas mətn üçün — 14sp (bodyMedium)-dən 16sp (bodyLarge)-ə qədər. 11sp-dən kiçik ölçülər tövsiyə edilmir, çünki yüksək piksel sıxlığı olan cihazlarda oxunmaz olurlar.

textSize-i dp-də təyin etsəm nə olar?

Mətn şriftin sistem parametrlərindən asılı olmayaraq sabit ölçüdə göstəriləcək. Böyüdülmüş şrifti olan istifadəçilər belə mətni rahat oxuya bilməyəcək. Bu, WCAG əlçatanlıq tələblərini pozur və Google Play-də tətbiqin rədd edilməsinə səbəb ola bilər.

Nəticə

  • sp — Android-də şrift ölçüsü vahidi, istifadəçi parametrlərinə uyğun FONT_SCALE vasitəsilə miqyaslanır
  • dp — element ölçüləri üçün vahid, şrift ölçüsünün dəyişməsinə reaksiya vermir
  • textSize XML-də android:textSize="16sp" vasitəsilə təyin edilir, qalan bütün ölçülər — dp-də
  • MaterialTheme.typography Jetpack Compose-da tiplərin təhlükəsizliyi üçün TextUnit (.sp) istifadə edir
  • dimens.xml — vahidlik üçün tipoqrafik tokenlərin mərkəzləşdirilmiş saxlanması
  • Minimum mətn ölçüsü — 11sp, body üçün tövsiyə olunan — 14–16sp
  • Test maksimum şrift miqyasında — əlçatanlıq yoxlamasının məcburi mərhələsidir

Açar təslim mobil tətbiq hazırlayacağıq

IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.

Layihəni müzakirə et

Həm də oxuyun