Pantrix UI

Auto Text

Görünür kalmak için küçülen metin: kendisine verilen yerde bütünüyle okunan bir tutar, bir başlık ya da bir ad.

import com.pantrixui.components.elements.autotext.PantrixAutoText

Örnekler

Yerine sığan metin

Aynı ad, giderek daralan üç yerde, title stiliyle. Yeri yettiği sürece metin stilinin boyutundadır. Yetmeyince tek satırda, bütünü görünecek en büyük boyuta iner. En küçük boyutunda, temanın footnote boyutunda da sığmazsa küçülmeyi bırakır ve sığmayan kısmı üç noktayla kesilir.

Yeri metne modifier verir: burada bir genişlik. Gri zemin o yeri gösterir.

val name = "Selim Karaosmanoğlu"
val room = PantrixTheme.colors.neutral.container
PantrixAutoText(
    text = name,
    modifier = Modifier.width(320.dp).background(room),
    style = PantrixTheme.typography.title,
    tagKey = "name_wide"
)
PantrixAutoText(
    text = name,
    modifier = Modifier.width(160.dp).background(room),
    style = PantrixTheme.typography.title,
    tagKey = "name_narrow"
)
PantrixAutoText(
    text = name,
    modifier = Modifier.width(72.dp).background(room),
    style = PantrixTheme.typography.title,
    tagKey = "name_narrowest"
)

Tek satırda küçülen bakiye

En büyük stilde bir bakiye. "Hane ekle" tutarı uzatır: tutar satıra sığdığı sürece stilinin boyutundadır, sığmayınca tek satırda kalacak kadar küçülür; "Hane sil" ile yeniden büyür. Altındaki soluk satır aynı metnin küçülmeyen hâlidir, bir PantrixText: sığmayınca kesilir.

Kuruş ve para birimi tutarın yarı boyutundadır. Boyutları em ile verildi: çevresindeki yazının payıdır, tutar küçülünce onunla birlikte küçülür ve her platformda yarısı kadar kalır.

var digits by rememberSaveable { mutableIntStateOf(4) }
val balance = buildAnnotatedString {
    append("1".padEnd(digits, '0').groupedInThousands())
    withStyle(SpanStyle(fontSize = 0.5.em)) { append(",00 TL") }
}
PantrixAutoText(
    text = balance,
    modifier = Modifier.fillMaxWidth(),
    style = PantrixTheme.typography.display,
    tagKey = "balance"
)
PantrixText(
    text = balance,
    style = PantrixTheme.typography.display,
    color = PantrixTheme.colors.textSecondary,
    maxLines = 1,
    tagKey = "balance_cut"
)
Row(horizontalArrangement = Arrangement.spacedBy(PantrixTheme.spacing.sm)) {
    PantrixButton(
        text = "Hane ekle",
        onClick = { digits++ },
        enabled = digits < 24,
        tagKey = "add_digit"
    )
    PantrixButton(
        text = "Hane sil",
        onClick = { digits-- },
        variant = ButtonVariant.Outline,
        enabled = digits > 1,
        tagKey = "remove_digit"
    )
}

private fun String.groupedInThousands(): String = reversed().chunked(3).joinToString(".").reversed()

En çok iki satırda bir başlık

En çok iki satıra sığdırılan bir başlık: maxLines = 2. Metin önce iki satıra bölünür; iki satır yetmeyince küçülür ve satır aralığı da yazıyla birlikte daralır. minFontSize temanın body boyutudur: başlık ondan küçük yazılmaz, orada da sığmazsa üç noktayla kesilir.

Küçülse de bir başlıktır: role = TextRole.Heading(level = 2) ekran okuyucuya öyle bildirilir. Sütun en fazla 420dp genişliğindedir, başlık onu doldurur.

Column(modifier = Modifier.widthIn(max = 420.dp)) {
    PantrixAutoText(
        text = "Kredi kartı ekstreniz kesildi: son ödeme tarihi ayın yirmi sekizi",
        modifier = Modifier.fillMaxWidth(),
        style = PantrixTheme.typography.headline,
        minFontSize = PantrixTheme.typography.body.fontSize,
        maxLines = 2,
        role = TextRole.Heading(level = 2),
        tagKey = "statement_title"
    )
}

Kutusuna sığan paragraf

Yüksekliği belli bir kutuya sığdırılan bir paragraf. maxLines = Int.MAX_VALUE satır sayısını kutunun yüksekliğine bırakır: metin, stilinin boyutunu aşmadan, 96dp'lik kutunun genişliğine ve yüksekliğine birlikte sığacak en büyük boyutta yazılır. Pencereyi daralt: kutu daraldıkça yazı küçülür.

Kutunun zemini ve iç boşluğu metnin kendi modifier'ındadır; metin, boşluktan kalan yere sığdırılır.

PantrixAutoText(
    text = "Bir tasarım sistemi, aynı kararı her ekranda yeniden vermemek için vardır: bir kez verilir, her " +
        "yerde aynı görünür.",
    modifier = Modifier
        .fillMaxWidth()
        .height(96.dp)
        .background(PantrixTheme.colors.neutral.container)
        .padding(PantrixTheme.spacing.sm),
    style = PantrixTheme.typography.title,
    textAlign = TextAlign.Center,
    maxLines = Int.MAX_VALUE,
    tagKey = "quote"
)

En küçük boyut

Aynı metin, aynı 200dp'lik yerde üç kez; yalnızca minFontSize farklı. Metin o boyuta inince küçülmeyi bırakır: en küçük boyut ne kadar küçükse metin o kadar küçülebilir ve o kadar çoğu görünür.

İlkinin en küçük boyutu 16.sp'dir. İkincisine verilmedi: temanın footnote boyutudur. Üçüncüsününki 0.4.em: em stilin kendi boyutunun payıdır, burada title boyutunun onda dördü.

val airport = "Sabiha Gökçen Uluslararası Havalimanı"
val room = Modifier.width(200.dp).background(PantrixTheme.colors.neutral.container)
PantrixAutoText(
    text = airport,
    modifier = room,
    style = PantrixTheme.typography.title,
    minFontSize = 16.sp,
    tagKey = "min_16sp"
)
PantrixAutoText(text = airport, modifier = room, style = PantrixTheme.typography.title, tagKey = "min_default")
PantrixAutoText(
    text = airport,
    modifier = room,
    style = PantrixTheme.typography.title,
    minFontSize = 0.4.em,
    tagKey = "min_em"
)

Yan yana kutularda, bir dolgunun üstünde

Yan yana iki kutuda birer sayı, headline stiliyle. Kutular genişliği weight ile paylaşır ve her sayı kendi kutusuna sığdırılır: kısa olan stilinin boyutunda kalır, uzun olan küçülür.

Renk verilmedi. PantrixText gibi, metin durduğu yerin içerik rengini alır: primary ile doldurulmuş kutuda o dolgunun üstünde okunan renkle yazılır.

val colors = PantrixTheme.colors
val spacing = PantrixTheme.spacing
Row(
    modifier = Modifier.widthIn(max = 360.dp),
    horizontalArrangement = Arrangement.spacedBy(spacing.md)
) {
    PantrixSurface(modifier = Modifier.weight(1f), color = colors.primary.color) {
        Column(modifier = Modifier.padding(spacing.md)) {
            PantrixText(text = "Bu ayki ciro", style = PantrixTheme.typography.footnote)
            PantrixAutoText(
                text = "1.284.500,75 TL",
                modifier = Modifier.fillMaxWidth(),
                style = PantrixTheme.typography.headline,
                tagKey = "revenue"
            )
        }
    }
    PantrixSurface(modifier = Modifier.weight(1f), border = colors.divider) {
        Column(modifier = Modifier.padding(spacing.md)) {
            PantrixText(text = "Sipariş", style = PantrixTheme.typography.footnote)
            PantrixAutoText(
                text = "32",
                modifier = Modifier.fillMaxWidth(),
                style = PantrixTheme.typography.headline,
                tagKey = "orders"
            )
        }
    }
}

API

text

Görünür kalmak için küçülen metin: kendisine verilen yerde bütünüyle okunan bir tutar, bir başlık ya da bir ad.

ParametreTürVarsayılanNe olduğu
textStringMetin.
modifierModifierModifierMetnin modifier'ı: metne sığdırılacağı yeri fillMaxWidth(), bir weight ya da bir boyut verir.
styleTextStyleLocalPantrixTextStyle.currentMetnin en büyük hâlindeki stili: temanın tipografisinin stillerinden biri. Verilmezse, PantrixText'te olduğu gibi, temel yazıdır, LocalPantrixTextStyle. Boyutu sp ile verilmeyen bir stilde metnin yazılacağı daha küçük bir boyut yoktur ve metin küçültülmez.
minFontSizeTextUnitPantrixTheme.typography.footnote.fontSizeMetnin ineceği en küçük boyut: sp ile ya da stilin kendi boyutunun payı olan em ile verilir. Verilmezse temanın footnote boyutudur. Stilin kendi boyutunda ya da onun üstünde metin hiç küçülmez, sıfırda ise küçülmenin sonu yoktur.
colorColorColor.UnspecifiedMetnin rengi. Verilmezse stilin rengi, metnin durduğu yerin içerik rengi ya da birincil yazı rengidir.
textAlignTextAlign?nullSatırların metnin genişliği içinde nasıl hizalandığı.
maxLinesInt1Metnin en çok kaç satır tutacağı: aksi söylenmedikçe bir. Int.MAX_VALUE satır sayısını metne verilen yüksekliğe bırakır.
minLinesInt1Metnin, en büyük boyutunda, en az kaç satır yüksekliğinde olacağı.
overflowTextOverflowTextOverflow.EllipsisEn küçük boyutunda da sığmayan metnin nasıl kesileceği.
softWrapBooleantrueMetnin, genişliğinin bittiği yerde satırlara bölünüp bölünmediği. Bölünmeyen metin en uzun satırına göre sığdırılır.
roleTextRoleTextRole.ParagraphMetnin ekran okuyucu için ne olduğu: düz yazı, başlık, etiket ya da süs.
selectableBooleanfalseKullanıcının seçip kopyalayabileceği bir metin olup olmadığı.
onTextLayout((TextLayoutResult) -> Unit)?nullMetnin, yazıldığı boyutta yerleştirilmiş hâliyle çağrılır.
tagKeyString?nullMetnin otomasyon anahtarı: metin AutoText_<tagKey> etiketini taşır. Anahtar verilmeyen metin etiketlenmez.

text

Parçaları ve bağlantılarıyla bir AnnotatedString alan PantrixAutoText. inlineContent, bu metnin adını verdiği yer tutucular içindir. Bir parçanın em ile verilen boyutu metnin boyutunu izler, sp ile verilen olduğu gibi kalır.

ParametreTürVarsayılanNe olduğu
textAnnotatedStringmetin, aralıkları ve bağlantılarıyla.
modifierModifierModifierMetnin modifier'ı: metne sığdırılacağı yeri fillMaxWidth(), bir weight ya da bir boyut verir.
styleTextStyleLocalPantrixTextStyle.currentMetnin en büyük hâlindeki stili: temanın tipografisinin stillerinden biri. Verilmezse, PantrixText'te olduğu gibi, temel yazıdır, LocalPantrixTextStyle. Boyutu sp ile verilmeyen bir stilde metnin yazılacağı daha küçük bir boyut yoktur ve metin küçültülmez.
minFontSizeTextUnitPantrixTheme.typography.footnote.fontSizeMetnin ineceği en küçük boyut: sp ile ya da stilin kendi boyutunun payı olan em ile verilir. Verilmezse temanın footnote boyutudur. Stilin kendi boyutunda ya da onun üstünde metin hiç küçülmez, sıfırda ise küçülmenin sonu yoktur.
colorColorColor.UnspecifiedMetnin rengi. Verilmezse stilin rengi, metnin durduğu yerin içerik rengi ya da birincil yazı rengidir.
textAlignTextAlign?nullSatırların metnin genişliği içinde nasıl hizalandığı.
maxLinesInt1Metnin en çok kaç satır tutacağı: aksi söylenmedikçe bir. Int.MAX_VALUE satır sayısını metne verilen yüksekliğe bırakır.
minLinesInt1Metnin, en büyük boyutunda, en az kaç satır yüksekliğinde olacağı.
overflowTextOverflowTextOverflow.EllipsisEn küçük boyutunda da sığmayan metnin nasıl kesileceği.
softWrapBooleantrueMetnin, genişliğinin bittiği yerde satırlara bölünüp bölünmediği. Bölünmeyen metin en uzun satırına göre sığdırılır.
roleTextRoleTextRole.ParagraphMetnin ekran okuyucu için ne olduğu: düz yazı, başlık, etiket ya da süs.
selectableBooleanfalseKullanıcının seçip kopyalayabileceği bir metin olup olmadığı.
inlineContentMap<String, InlineTextContent>emptyMap()
onTextLayout((TextLayoutResult) -> Unit)?nullMetnin, yazıldığı boyutta yerleştirilmiş hâliyle çağrılır.
tagKeyString?nullMetnin otomasyon anahtarı: metin AutoText_<tagKey> etiketini taşır. Anahtar verilmeyen metin etiketlenmez.