sp: mi ez, skálázható pixelek szöveghez Androidban

Szerző: IT Sectr Megjelenés: 2026-02-25 Olvasási idő: 9 perc

sp — Scale-independent Pixels, a szöveg mértékegysége Androidban, amely figyelembe veszi a betűméret beállításait az eszközön. A dp-vel ellentétben az sp a rendszer betűméretével együtt skálázódik, biztosítva a felületek hozzáférhetőségét. A cikk elmagyarázza az sp és dp közötti különbséget, bemutatja a textSize beállítását XML-ben és Kotlinban, valamint feltárja a tipográfiával való munka legjobb gyakorlatait Androidban.

Főbb pontok

  • sp — szöveg egysége, skálázható a felhasználó rendszerbetű-beállításai szerint
  • dp — elemek méretének egysége, nem reagál a betűméret változására
  • Különbség sp és dp között: sp = dp × scaleFactor, ahol a scaleFactor a betű beállításaitól függ
  • textSize XML-ben sp-n keresztül állítható be: android:textSize="16sp"
  • Material Design a tipográfiai lépést 12sp-től 34sp-ig ajánlja a címsorokhoz

Mi az sp Androidban?

sp (scale-independent pixel) — a betűméret mértékegysége Androidban, amely automatikusan skálázódik a felhasználó rendszerbeállításai szerint. Amikor az eszköz tulajdonosa megnöveli a betűméretet a beállításokban, az sp értékekkel rendelkező elemek arányosan nőnek. Ez biztosítja a felület hozzáférhetőségét a gyenge látású emberek számára.

Alap arány: 1 sp = 1 dp normál betűskálánál 1.0 (normal). Ha a felhasználó a Large (1.15×) betűt állítja be, 16 sp 18.4 fizikai pixellé alakul. Small (0.85×) betűméretnél ugyanaz a 16 sp 13.6 px lesz. A skálázási mechanizmus a Settings.System.FONT_SCALE segítségével az Android Framework szintjén vezérelhető.

A Google Material Design Guidelines szerint a szöveget kizárólag sp-ben kell beállítani. Kivételt képeznek a rögzített címkék olyan komponensekben, ahol a méret kritikus az elrendezés szempontjából (pl. szöveg a rögzített magasságú gombokon belül). Ilyen esetekben a dp használata ajánlott kézi hozzáférhetőség-ellenőrzéssel.

sp vs dp: főbb különbségek

A különbség sp és dp között — az egyik leggyakoribb kérdés az Android-fejlesztői interjúkon és a valós code review-kban. Mindkét egység a density-independent pixelhez kapcsolódik (160 dpi = 1 dp = 1 px mdpi képernyőn), de eltérően viselkednek a rendszer betűméretének változásakor.

Jellemzőspdp
CélSzöveg méreteElemek mérete, távolságok, szélesség, magasság
Skálázás betűvelIgen (scale factor)Nem
Skálázás sűrűséggelIgenIgen
API beállításhozandroid:textSizeandroid:layout_width, layout_height, padding, margin
Material Design Tokentypescalespacing, sizing

A gyakorlatban hiba — dp használata szöveghez. Ha a szöveg dp-ben van beállítva, nem skálázódik a betű növelésekor, ami elérhetetlenné teszi a felületet a gyenge látású felhasználók számára. Az ellenkező hiba — sp használata gombmagassághoz vagy távolságokhoz: a betű növelésekor a gomb „feldagadhat", elrontva az elrendezést.

Hogyan működik az sp skálázása

Az sp skálázása az Android Framework szintjén a TypedValue osztályban van megvalósítva. Az átszámítási képlet: sp = dp × scaledDensity, ahol a scaledDensity a skála együtthatója, amely figyelembe veszi mind a képernyő sűrűségét, mind a felhasználó betűbeállítását.

kotlin
// ScaledDensity programozott lekérése Kotlinban
val scaledDensity = with(context.resources) {
    displayMetrics.scaledDensity
}

// Sp konvertálása px-be
fun spToPx(sp: Float, context: Context): Float {
    return TypedValue.applyDimension(
        TypedValue.COMPLEX_UNIT_SP,
        sp,
        context.resources.displayMetrics
    )
}

// Px konvertálása sp-be
fun pxToSp(px: Float, context: Context): Float {
    return px / context.resources.displayMetrics.scaledDensity
}

A TypedValue.applyDimension metódus — az egyetlen helyes módja az sp pixellé konvertálásának futásidőben. A közvetlen szorzás scaledDensity-vel kevésbé megbízható, mert nem kezeli a szélsőséges eseteket (nulla értékek, túlcsordulás). A scaledDensity a Settings > Display > Font size betűbeállításainak megváltoztatásakor változik.

Skálázási együtthatók

Az Android öt előre beállított betűskála-szintet kínál: Small (0.85×), Default (1.0×), Large (1.15×), Largest (1.3×) és egy további Very Large (>1.3×) szintet Android 14+-ban. Az eszközgyártók (Samsung, Xiaomi) saját szinteket adnak hozzá — akár 2.0×-ig. A szöveg minimális mérete sp-ben soha nem garantál rögzített pixelszámot.

Sp használata XML-ben

XML-ben az sp kizárólag az android:textSize attribútumban használatos. Az összes többi méret — width, height, padding, margin, elevation — dp-ben van beállítva. A szabály egyszerű: ha egy elem szöveget jelenít meg — a mérete sp-ben, ha egy elem geometriát határoz meg — a mérete dp-ben.

Alapvető textSize példa XML-ben

xml
<!-- TextView elrendezés textSize sp-vel -->
<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 erőforrások használata -->
<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textSize="@dimen/text_body_large" />

Ajánlott a szöveg méreteit a dimens.xml fájlba kiszervezni. Ez leegyszerűsíti a tipográfia karbantartását, lehetővé teszi a méretek felülírását különböző képernyőkonfigurációkhoz, és egységességet biztosít az egész alkalmazásban.

dimens.xml tipográfiai tokenekkel

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>

A Material Design Type Scale 13 méretszintet foglal magában — 11sp-től a kis címkék számára 57sp-ig a nagy megjelenítési címsorokhoz. Az Android projektek általában 8–10 szintet használnak. Minden értéknek az 1sp többszörösének kell lennie — a tört értékek (15.5sp) rontják a renderelést a szubpixel pozicionálás miatt.

Tipográbia beállítása Kotlinon keresztül

A modern Android-fejlesztésben a szöveget ritkán állítják be közvetlenül a textSize-on keresztül sp-ben. Ehelyett a MaterialTheme.typography rendszert használják, ahol minden stílus előre meghatározott, és tartalmazza a méretet, súlyt, sorközt és a betűközt.

kotlin
// Egyéni tipográfia a Typography API-n keresztül
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
    )
)

A .sp kiterjesztő függvény a Jetpack Compose-ban automatikusan scale-independent pixelekké alakul. A rendszer betűméretének változásakor a Compose újraszámolja a fontSize, lineHeight és spacing értékeket az új scaledDensity szerint. A TextUnit (az sp-t reprezentáló osztály) garantálja, hogy a szöveg skálázódik, a távolságok viszont nem.

Sp a Jetpack Compose-ban

A Jetpack Compose-ban az sp-t a TextUnit típus képviseli, amely nem használható véletlenül elemek méretezésére. A Kotlin fordító hibát jelez, ha a TextUnit oda kerül, ahol Dp-t vár. Ez kiküszöböli a helytelen skálázással kapcsolatos hibák egész osztályát.

kotlin
// TextUnit Compose-ban — biztonságos munka sp-vel
@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 explicit beállítása sp-ben
Text(
    text = "Egyéni méret",
    fontSize = 20.sp,
    fontWeight = FontWeight.Bold,
    color = MaterialTheme.colorScheme.primary
)

A Compose-ban nincs közvetlen megfelelője az XML android:textSize attribútumnak — a szöveg mérete a TextStyle.fontSize-on keresztül állítható be. A MaterialTheme.typography rendszer előre meghatározott stílusokat nyújt, amelyek megfelelnek a Material Design Type Scale-nek. Ha egyéni méretre van szükség, a 20.sp literál használatos — a nyelv garantálja, hogy ez TextUnit, nem Dp.

Legjobb gyakorlatok az sp-vel való munkához

Az sp helyes használata — egy hozzáférhető Android alkalmazás alapja. Az alábbiakban a Google Material Design és az Android Developers Guide ajánlásain alapuló szabályok találhatók.

  • Mindig sp-t használjon szöveghez — soha ne állítsa be a textSize-t dp-ben vagy px-ben, különben a megnövelt betűméretű felhasználók nem tudják olvasni a felületet
  • Használjon dp-t konténerekhez — a gombok magassága, távolságok és kártyák szélessége dp-ben legyen, különben nagy betűnél az elemek átfedhetik egymást
  • Szervezze ki a méreteket a dimens.xml-be — a tipográfiai tokenek központosított tárolása leegyszerűsíti a refaktorálást és a sötét téma támogatását
  • Ne használjon 12sp-nél kisebb sp-t — a kisebb méretű szöveg olvashatatlanná válik a magas PPI-jű eszközökön és normál betűméret mellett
  • Tesztelje maximális betűskálán — kapcsolja be az eszközbeállításokban a legnagyobb betűt, és ellenőrizze, hogy a felület nem törik

A hozzáférhetőség fő szabálya: a felhasználónak lehetőséget kell adni a betűméret növelésére a funkcionalitás elvesztése nélkül. Ha az alkalmazás helyesen működik 1.3×-es betűskálán, átmegy az alapvető hozzáférhetőségi teszteken. A Google Play elutasíthatja az alkalmazást, ha a textSize dp-ben van beállítva és a felület nem skálázódik.

Gyakran Ismételt Kérdések

Miben különbözik az sp a dp-től?

sp (scale-independent pixel) skálázódik a rendszer betűméretének változásakor, míg a dp — nem. sp csak szöveghez használatos, dp — az elemek összes többi méretéhez. Átszámítási tényező: sp = dp × FONT_SCALE.

Használható az sp távolságokhoz?

Nem. A távolságokat, gombmagasságot, kártyák szélességét dp-ben kell beállítani. Az sp használata távolságokhoz azt eredményezi, hogy a betű növelésekor az elemek természetellenesen nőnek, és túlléphetik a képernyő határait.

Hogyan ellenőrizhető, hogy az alkalmazás helyesen működik-e sp-vel?

Nyissa meg a Settings > Display > Font size menüt, és állítsa be a maximális értéket (Largest). Indítsa el az alkalmazást, és ellenőrizze, hogy az összes szöveg olvasható, az elemek nem fedik egymást, és a gombok nem lépik át a képernyő határait. Az automatizáláshoz használja az Espresso-t az UiAutomator-ral.

Mi a minimális megengedett szövegméret sp-ben?

A Material Design minimális méretként 11sp-t ajánl a labelSmall számára. A fő szöveghez — 14sp (bodyMedium)-től 16sp (bodyLarge)-ig. A 11sp-nél kisebb méretek nem ajánlottak, mert olvashatatlanná válnak a magas pixelsűrűségű eszközökön.

Mi történik, ha textSize-t dp-ben állítok be?

A szöveg rögzített méretben jelenik meg a rendszer betűbeállításaitól függetlenül. A megnövelt betűméretű felhasználók nem tudják kényelmesen olvasni az ilyen szöveget. Ez sérti a WCAG hozzáférhetőségi követelményeit, és az alkalmazás Google Play-beli elutasításához vezethet.

Összefoglalás

  • sp — betűméret mértékegysége Androidban, a felhasználói beállítások szerint skálázható a FONT_SCALE segítségével
  • dp — elemek méretének egysége, nem reagál a betűméret változására
  • textSize XML-ben az android:textSize="16sp" segítségével állítható be, az összes többi méret — dp-ben
  • MaterialTheme.typography a Jetpack Compose-ban a TextUnit (.sp) használja a típusbiztonságért
  • dimens.xml — a tipográfiai tokenek központosított tárolása az egységességért
  • Minimális szövegméret — 11sp, ajánlott body-hoz — 14–16sp
  • Tesztelés maximális betűskálán — a hozzáférhetőség-ellenőrzés kötelező szakasza

Kulcsrakész mobilalkalmazást fejlesztünk

Az IT Sectr 2017 óta készít iOS és Android alkalmazásokat induló vállalkozásoknak és vállalkozásoknak. Tanácsot adunk, és a legjobb megoldást javasoljuk.

Projekt megbeszélése

Olvassa el is