Pantrix UI

Card Skeleton

İçeriği henüz gelmemiş bir PantrixCard: kartın kendi yüzeyi, başlığının, gövdesinin ve eylemlerinin geleceği yerde çubuklarla.

import com.pantrixui.components.container.card.PantrixCardSkeleton

Örnekler

Veri gelene kadar: iskelet

"Yenile"ye bas: iki kart iki saniyeliğine iskeletleriyle yer değiştirir. PantrixCardSkeleton bir karta benzetilerek çizilmez, kartın kendi şekli, dolgusu, gölgesi, iç boşluğu ve aralıklarıyla kurulur. Çubukları, yerini tuttukları şeyin kapladığı yeri kaplar: veri gelince kartın yüksekliği değişmez ve altındaki hiçbir şey yerinden oynamaz.

İskelet kartın içinde ne olduğunu bilemez: showHeader, lines, footerButtons ve mediaHeight yerine geçtiği karta göre verilir. İlk kartın bir başlığı, bir satırı ve iki düğmesi var: lines = 1, footerButtons = 2.

"Kampanya" kartının dolgusu ve içeriğinin rengi dışarıdan verildi. İskeleti de kartın renklerini colors ile alır; çubukları skeletonColors ile verilen renkte çizilir.

val own = ownColors()
val campaign = CardColors(container = own.container, content = own.onContainer)
var loading by remember { mutableStateOf(false) }
LaunchedEffect(loading) {
    if (loading) {
        delay(2_000)
        loading = false
    }
}
if (loading) {
    PantrixCardSkeleton(modifier = Modifier.fillMaxWidth(), lines = 1, footerButtons = 2)
} else {
    PantrixCard(
        modifier = Modifier.fillMaxWidth(),
        header = {
            PantrixText(
                text = "Sipariş #1042",
                style = PantrixTheme.typography.title,
                role = TextRole.Heading(level = 3)
            )
        },
        footer = {
            PantrixButton(
                text = "Yenile",
                onClick = { loading = true },
                variant = ButtonVariant.Text,
                tagKey = "reload"
            )
            PantrixButton(text = "Takip et", onClick = {}, tagKey = "track")
        }
    ) {
        PantrixText(text = "İki ürün, perşembe günü teslim")
    }
}
if (loading) {
    PantrixCardSkeleton(
        modifier = Modifier.fillMaxWidth(),
        variant = CardVariant.Filled,
        colors = campaign,
        skeletonColors = SkeletonColors(base = own.onContainer.copy(alpha = 0.3f), highlight = own.container),
        lines = 1
    )
} else {
    PantrixCard(
        modifier = Modifier.fillMaxWidth(),
        variant = CardVariant.Filled,
        colors = campaign,
        tagKey = "campaign"
    ) {
        PantrixText(text = "Kampanya", style = PantrixTheme.typography.title)
        PantrixText(text = "Dolgusu ve içeriğinin rengi dışarıdan verildi")
    }
}

Yüklenen liste

Yüklenen bir liste: iki kenarlı kartın iskeleti. mediaHeight kartın göstereceği görselin yerini tutar, lines gövdenin satırlarının, footerButtons eylemlerin.

Tek başına duran iskelet ekran okuyucuya bir kez, kartın tamamı için duyurulur: temanın "yükleniyor" sözüyle. Zaten yüklendiğini söyleyen bir şeyin içinde bu söz kapatılır: burada yüklendiğini liste bir kez söyler, iskeletlere contentDescription = null verildi.

val loading = PantrixTheme.strings.loading
Column(
    modifier = Modifier.widthIn(max = 360.dp).semantics { contentDescription = loading },
    verticalArrangement = Arrangement.spacedBy(PantrixTheme.spacing.md)
) {
    repeat(2) {
        PantrixCardSkeleton(
            modifier = Modifier.fillMaxWidth(),
            variant = CardVariant.Outlined,
            lines = 2,
            footerButtons = 1,
            mediaHeight = 96.dp,
            contentDescription = null
        )
    }
}

API

modifier

İçeriği henüz gelmemiş bir PantrixCard: kartın kendi yüzeyi, başlığının, gövdesinin ve eylemlerinin geleceği yerde çubuklarla.

ParametreTürVarsayılanNe olduğu
modifierModifierModifierİskeletin modifier'ı.
variantCardVariantCardVariant.ElevatedYerine geçtiği kartın varyantı: aynı dolgu, gölge ve kenar.
styleCardStyle?nullBu çağrının kendi CardStyle'ı: çevresindeki her stili ezer, yoğunluk ona da uygulanır. Eylemlerin çubukları temanın düğme şeklini korur.
shapeShapePantrixTheme.style(CardStyle, style).shape.toShape()Kartın köşeleri: varsayılanı, geçerli stilin köşeleridir. Burada verilen şekil, style'ın köşelerinin önüne geçer.
colorsCardColors?nullYerine geçtiği kartın renkleri, o kartın kendi renkleri varsa: aynı dolgu ve kenar.
skeletonColorsSkeletonColors?nullÇubukların, temadan gelmeyen kendi renkleri.
contentPaddingPaddingValuesPaddingValues(PantrixTheme.spacing.lg)Çubukların çevresindeki boşluk; bir kartın içeriğinin çevresindeki gibidir.
showHeaderBooleantrueBaşlığın yerini bir çubuğun tutup tutmayacağı: temanın title stilinde bir satır kadar.
linesInt3Çubukların kaç satır metnin yerini tuttuğu; metin, bir PantrixText'in stil verilmediğinde yazıldığı stildedir.
footerButtonsInt0Eylemlerin çubuklarının kaç düğmenin yerini tuttuğu.
mediaHeightDp?nullKartın, içeriğinin üstünde göstereceği görselin yüksekliği; görseli olmayan bir kart için null.
contentDescriptionString?PantrixTheme.strings.loadingEkran okuyucunun iskeletin tamamı için söylediği; zaten yüklendiğini söyleyen bir şeyin içinde null.
tagKeyString?nulliskeletin otomasyon anahtarı: iskelet CardSkeleton_<tagKey>'dır, çubuklarının kendi etiketleri yoktur. Anahtar yoksa etiketi olmaz.

CardStyle

PantrixCard'ın geometrisi: köşeleri ve yükseltilmiş varyantının gölgesi.

ParametreTürVarsayılanNe olduğu
shapeShapeSpecShapeSpec.UnspecifiedKartın köşeleri: Android'de orta, iOS'ta büyük, masaüstünde ve web'de küçük.
elevationDpDp.UnspecifiedCardVariant.Elevated'ın altındaki gölge: Android'de 2dp, iOS'ta yok, masaüstünde ve web'de 1dp. Öteki varyantlar gölge çizmez.

CardColors

Varyantının renklerini almayan bir PantrixCard'ın boyandığı renkler: verilen renk kullanılır, verilmeyen varyantınki kalır.

ParametreTürVarsayılanNe olduğu
containerColorColor.UnspecifiedKartın dolgusu. Temanın surface'ıdır; bir CardVariant.Filled kartta nötr rolün container'ıdır.
contentColorColor.UnspecifiedKartın içindekilerin, bir çocuk kendi rengini vermedikçe, çizildiği renk: container üstünde okunan renk. Temanın surface'ı üstünde yoktur: orada her çocuk kendi varsayılanıyla çizilir, bir metin textPrimary ile. Dolgulu bir kartta nötr rolün onContainer'ıdır.
borderColorColor.UnspecifiedKartın çevresindeki ince kenar. Bir CardVariant.Outlined kartta temanın divider'ıdır; o karta temanın zeminlerinden olmayan, o çizginin okunmayacağı bir dolgu verildiğinde ise orada yazılan rengin bir payıdır: Subtle düğmenin kenarı gibi. Öteki varyantların, burada verilmedikçe, ince kenarı yoktur.