Pantrix UI

Tag

Bir verinin üstündeki kısa bir etiket: bir durum, bir kategori, bir sürüm.

import com.pantrixui.components.data.tag.PantrixTag

Örnekler

Tonlar ve biçimler

Her satırda bir biçim, her biçimde altı ton: Soft, Solid ve Outline. Her etiketin sözü, tonun ne anlattığını söyler; renk onu yalnızca destekler.

Column(verticalArrangement = Arrangement.spacedBy(PantrixTheme.spacing.md)) {
    TagVariant.entries.forEach { variant ->
        FlowRow(
            horizontalArrangement = Arrangement.spacedBy(PantrixTheme.spacing.sm),
            verticalArrangement = Arrangement.spacedBy(PantrixTheme.spacing.sm)
        ) {
            TONE_WORDS.forEach { (tone, words) ->
                PantrixTag(text = words, tone = tone, variant = variant, tagKey = "${variant.name}_${tone.name}")
            }
        }
    }
}

private val TONE_WORDS = listOf(
    TagTone.Primary to "Öne çıkan",
    TagTone.Info to "Bilgi",
    TagTone.Success to "Ödendi",
    TagTone.Warning to "Süresi doluyor",
    TagTone.Danger to "Gecikmiş",
    TagTone.Neutral to "Taslak"
)

İkon ve nokta

İkon yazının önünde, yazının renginde durur ve ekran okuyucuya bir şey söylemez. Nokta rolün dolu rengindedir ve bir durumu söyler: çevrimiçi, kesinti, çevrimdışı. İkisi birden verildiğinde ikon çizilir.

Column(verticalArrangement = Arrangement.spacedBy(PantrixTheme.spacing.md)) {
    FlowRow(
        horizontalArrangement = Arrangement.spacedBy(PantrixTheme.spacing.sm),
        verticalArrangement = Arrangement.spacedBy(PantrixTheme.spacing.sm)
    ) {
        PantrixTag(text = "Doğrulandı", tone = TagTone.Success, icon = PantrixIcons.Check)
        PantrixTag(text = "Beta", tone = TagTone.Info, icon = PantrixIcons.Info)
        PantrixTag(text = "Az stok", tone = TagTone.Warning, icon = PantrixIcons.Warning)
        PantrixTag(text = "Öne çıkan", tone = TagTone.Primary, variant = TagVariant.Solid, icon = PantrixIcons.Star)
    }
    FlowRow(
        horizontalArrangement = Arrangement.spacedBy(PantrixTheme.spacing.sm),
        verticalArrangement = Arrangement.spacedBy(PantrixTheme.spacing.sm)
    ) {
        PantrixTag(text = "Çevrimiçi", tone = TagTone.Success, dot = true, tagKey = "online")
        PantrixTag(text = "Kesinti", tone = TagTone.Danger, variant = TagVariant.Solid, dot = true)
        PantrixTag(text = "Çevrimdışı", dot = true)
        PantrixTag(text = "Aktif", tone = TagTone.Success, variant = TagVariant.Outline, dot = true)
    }
}

Bir satırın durumu

Etiketin asıl yeri bir satırın sonu: faturanın durumu. Satır etiket kadar alçalmaz; etiket satırın içinde, satırı ele geçirmeden durur ve ona basılmaz. Satıra basmak bir şey yapacaksa onu satır yapar.

Column(verticalArrangement = Arrangement.spacedBy(PantrixTheme.spacing.md)) {
    INVOICES.forEach { invoice ->
        Row(
            modifier = Modifier.fillMaxWidth(),
            horizontalArrangement = Arrangement.spacedBy(PantrixTheme.spacing.md),
            verticalAlignment = Alignment.CenterVertically
        ) {
            PantrixText(text = invoice.number, modifier = Modifier.weight(1f), maxLines = 1)
            PantrixText(text = invoice.amount, color = PantrixTheme.colors.textSecondary, maxLines = 1)
            PantrixTag(
                text = invoice.state.words,
                tone = invoice.state.tone,
                dot = true,
                tagKey = "state_${invoice.key}"
            )
        }
    }
}

private val INVOICES = listOf(
    Invoice("1042", "Fatura #1042", "1 240 ₺", InvoiceState.Paid),
    Invoice("1043", "Fatura #1043", "860 ₺", InvoiceState.Due),
    Invoice("1044", "Fatura #1044", "3 125 ₺", InvoiceState.Overdue),
    Invoice("1045", "Fatura #1045", "410 ₺", InvoiceState.Draft)
)

private enum class InvoiceState(val words: String, val tone: TagTone) {
    Paid("Ödendi", TagTone.Success),
    Due("Vadesi yakın", TagTone.Warning),
    Overdue("Gecikmiş", TagTone.Danger),
    Draft("Taslak", TagTone.Neutral)
}

private class Invoice(val key: String, val number: String, val amount: String, val state: InvoiceState)

Bir başlığın yanında

Bir yazının konuları, başlığının yanında: dolgusuz etiketler, renkli bir sayfada göze batmaz. Sığmayan etiketler alt satıra geçer; bunu FlowRow yapar, etiket değil. En alttaki etiketin yeri dardır ve sözü "…" ile kesilir.

Column(verticalArrangement = Arrangement.spacedBy(PantrixTheme.spacing.md)) {
    FlowRow(
        horizontalArrangement = Arrangement.spacedBy(PantrixTheme.spacing.sm),
        verticalArrangement = Arrangement.spacedBy(PantrixTheme.spacing.sm),
        itemVerticalAlignment = Alignment.CenterVertically
    ) {
        PantrixText(text = "Compose Multiplatform'da tema", style = PantrixTheme.typography.title)
        TOPICS.forEach { topic -> PantrixTag(text = topic, variant = TagVariant.Outline) }
    }
    PantrixTag(
        text = "Onay bekleyen üç değişiklik var",
        modifier = Modifier.widthIn(max = NARROW_WIDTH.dp),
        tone = TagTone.Warning,
        tagKey = "narrow"
    )
}

private val TOPICS = listOf("Kotlin", "Tasarım", "Erişilebilirlik")

private const val NARROW_WIDTH = 160

Bir dolgunun üstünde

Temanın zemini olmayan bir dolgunun üstünde, burada birincil rolün dolu renginde: Soft ve Solid kendi zeminlerini getirir, rolün renkleriyle çizilir. Dolgusuz Outline ise orada yazılan renkte, burada beyazdır: rolün kendi rengi o dolgunun üstünde okunmayabilir.

PantrixSurface(color = PantrixTheme.colors.primary.color) {
    FlowRow(
        modifier = Modifier.padding(PantrixTheme.spacing.md),
        horizontalArrangement = Arrangement.spacedBy(PantrixTheme.spacing.sm),
        verticalArrangement = Arrangement.spacedBy(PantrixTheme.spacing.sm)
    ) {
        PantrixTag(text = "Yeni", tone = TagTone.Success)
        PantrixTag(text = "Sınırlı", tone = TagTone.Warning, variant = TagVariant.Solid)
        PantrixTag(text = "Sürüm 2.4", variant = TagVariant.Outline, tagKey = "outline_on_fill")
        PantrixTag(text = "Canlı", variant = TagVariant.Outline, dot = true)
    }
}

Kendi renkleri ve kendi açıklaması

colors, temanın hiçbir rolünde olmayan bir renk verir: burada uygulamanın kendi moru. Verilmeyen renkler tonun kalır. Son etiketin contentDescription'ı vardır: ekran okuyucu "Gecikmiş" yerine "Ödeme durumu: gecikmiş" der.

val own = ownColors()
FlowRow(
    horizontalArrangement = Arrangement.spacedBy(PantrixTheme.spacing.sm),
    verticalArrangement = Arrangement.spacedBy(PantrixTheme.spacing.sm)
) {
    PantrixTag(
        text = "Kampanya",
        colors = TagColors(container = own.container, content = own.onContainer, dot = own.color),
        dot = true,
        tagKey = "own"
    )
    PantrixTag(
        text = "Kampanya",
        variant = TagVariant.Outline,
        colors = TagColors(content = own.onContainer, border = own.color)
    )
    PantrixTag(
        text = "Gecikmiş",
        tone = TagTone.Danger,
        contentDescription = "Ödeme durumu: gecikmiş",
        tagKey = "described"
    )
}

Kendi stiliyle

Kendi stiliyle: TagStyle etiketin yüksekliğini, iç boşluğunu, köşesini ve noktasını verir. Burada etiketler hap biçiminde, 32dp yüksekliğinde ve 10dp'lik noktalıdır; verilmeyen her alan platformun ön ayarıdır. Sözlerin yazısını textStyle verir: burada temanın label'ı, kalın.

val style = TagStyle(shape = ShapeRole.Full, height = 32.dp, horizontalPadding = 14.dp, dotSize = 10.dp)
val words = PantrixTheme.typography.label.copy(fontWeight = FontWeight.Bold)
FlowRow(
    horizontalArrangement = Arrangement.spacedBy(PantrixTheme.spacing.sm),
    verticalArrangement = Arrangement.spacedBy(PantrixTheme.spacing.sm)
) {
    PantrixTag(
        text = "Çevrimiçi",
        tone = TagTone.Success,
        dot = true,
        style = style,
        tagKey = "online_pill",
        textStyle = words
    )
    PantrixTag(
        text = "Bakımda",
        tone = TagTone.Warning,
        dot = true,
        style = style,
        tagKey = "maintenance_pill",
        textStyle = words
    )
}

API

text

Bir verinin üstündeki kısa bir etiket: bir durum, bir kategori, bir sürüm.

ParametreTürVarsayılanNe olduğu
textStringetiketin söylediği: bir iki söz.
modifierModifierModifieretiketin modifier'ı.
toneTagToneTagTone.Neutraletiketin çizildiği renk rolü.
variantTagVariantTagVariant.Softetiketin rolün ne kadarını giydiği.
iconImageVector?nullsözlerin önüne, onların renginde çizilir. Ekran okuyucuya bir şey söylemez.
dotBooleanfalseicon olmadığında sözlerin önünde rolün dolu renginde küçük bir daire durup durmadığı: bir satırın içinde bulunduğu durum.
contentDescriptionString?nullekran okuyucunun etiket için sözlerinin yerine söylediği, ya da sözler için null.
styleTagStyle?nullbu çağrının kendi stili: çevreleyen her stilin üstünde, yoğunluğun altında. Yalnızca verdiği alanlar değişir, her platformda.
colorsTagColors?nullbu etiketin tonununkilerin yerine kendi renkleri: verdikleri, geri kalanlar için tonunkiler.
tagKeyString?nulletiketin otomasyon anahtarı: etiket Tag_<tagKey> olur, ve yalnızca bir anahtar verildiğinde test etiketi alır.
textStyleTextStylePantrixTheme.typography.footnotesözlerin yazı stili: verilmezse temanın footnote stili. Renklerini etiket verir.

TagStyle

PantrixTag'in geometrisi: bir satırın içinde, onu ele geçirmeden duracak kadar küçük bir etiket.

ParametreTürVarsayılanNe olduğu
shapeShapeSpecShapeSpec.UnspecifiedEtiketin köşeleri: markanın şekil ölçeğinden bir adım, ya da sabit bir şekil.
heightDpDp.UnspecifiedBir etiketin en az yüksekliği. Daha büyük bir yazı onu uzatır.
horizontalPaddingDpDp.UnspecifiedEtiketin kenarlarıyla içindekiler arasındaki boşluk.
iconPaddingDpDp.Unspecifiedİkon ya da nokta ile sözler arasında.
iconSizeDpDp.Unspecifiedİkonun genişliği ve yüksekliği.
borderWidthDpDp.UnspecifiedTagVariant.Outline'ın kenarının ve TagColors'ta verilen bir kenarın genişliği.
dotSizeDpDp.UnspecifiedNoktanın genişliği ve yüksekliği.

TagColors

Bir PantrixTag'in tonunun renkleri yerine boyandığı renkler: verilen bir renk kullanılır, bırakılan tonunki kalır.

ParametreTürVarsayılanNe olduğu
containerColorColor.UnspecifiedEtiketin dolgusu. TagVariant.Soft'ta rolün container'ı, TagVariant.Solid'de color'ı, TagVariant.Outline'da yok.
contentColorColor.UnspecifiedSözler ve ikon: container'ın üstünde okunan renk. TagVariant.Soft'ta rolün onContainer'ı, TagVariant.Solid'de onColor'ı, TagVariant.Outline'da temanın zeminlerinde okunan color'ı. Temanın zemini olmayan bir dolgunun üstündeki çerçeveli etiket orada yazılan renkte yazılır.
borderColorColor.UnspecifiedEtiketin kenarı: TagVariant.Outline'ınki, content renginde. Başka bir biçimdeki etiketin kenarı, burada verildiyse olur.
dotColorColor.UnspecifiedNokta: rolün color'ı, rolün dolu rengi üstünde ise onun onColor'ı. Temanın zemini olmayan bir dolgunun üstünde çerçeveli etiketin noktası content renginde.