Pantrix UI

Icon Button

Yalnızca bir ikon gösteren düğme: karedir, size boyutundaki bir düğme kadar yüksektir, varsayılan olarak yuvarlaktır ve çevresinde platformun en küçük dokunma hedefi kadar yer ayrılır. Renklerini variant seçer. Varsayılan olan ButtonVariant.Text'in, devre dışı olsun olmasın, dolgusu yoktur. contentDescription ekran okuyucu için işi adlandırır: "X" değil, "Kapat".

import com.pantrixui.components.elements.iconbutton.PantrixIconButton

Örnekler

En yalın hâli

En az yazılan hâli: bir ikon, ne yaptığını söyleyen bir açıklama ve basılınca olacak iş. Varyantı Text, boyutu Medium'dur: dolgusuz, 40dp'lik yuvarlak bir düğme.

Düğmeye bas: altındaki satır kaç kez basıldığını söyler. Dolgusu olmadığı için düğmenin yuvarlağı basılıyken ve klavye odağı üstündeyken görünür.

var refreshed by rememberSaveable { mutableIntStateOf(0) }
PantrixIconButton(
    imageVector = PantrixIcons.Refresh,
    contentDescription = "Yenile",
    onClick = { refreshed += 1 },
    tagKey = "refresh"
)
PantrixText(
    text = "$refreshed kez yenilendi",
    color = PantrixTheme.colors.textSecondary,
    tagKey = "refreshed"
)

Varyantlar

variant düğmenin renklerini seçer; altısı da PantrixButton'ın varyantlarıdır. Solid ekrandaki ana iştir, Outline, Soft ve Subtle ikincil işlerdir, Destructive geri alınamayan işi söyler.

Varsayılan Text'tir: yüzeyi yoktur, yalnızca ikonu çizilir. Bir araç çubuğundaki işler içindir.

FlowRow(
    horizontalArrangement = Arrangement.spacedBy(PantrixTheme.spacing.sm),
    verticalArrangement = Arrangement.spacedBy(PantrixTheme.spacing.sm)
) {
    ButtonVariant.entries.forEach { variant ->
        PantrixIconButton(
            imageVector = PantrixIcons.Star,
            contentDescription = "${variant.name} varyantında düğme",
            onClick = {},
            variant = variant,
            tagKey = "variant_${variant.name}"
        )
    }
}

Boyutlar

size beş boyuttan birini seçer: düğme 24, 32, 40, 48 ve 56 dp'lik bir karedir, ikonu 16, 20, 24, 28 ve 32 dp. Varsayılan Medium'dur. Aynı boyuttaki bir PantrixButton ile yan yana durduğunda ikisi aynı yüksekliktedir.

Küçük düğmelerin çevresindeki boşluk dokunma hedefidir: düğme küçük çizilir ama platformun en küçük dokunma hedefi kadar yer tutar. Bu yer Android'de 48dp, iOS'ta 44dp, fareyle kullanılan masaüstünde ve web'de 32dp'dir.

FlowRow(
    horizontalArrangement = Arrangement.spacedBy(PantrixTheme.spacing.sm),
    verticalArrangement = Arrangement.spacedBy(PantrixTheme.spacing.sm),
    itemVerticalAlignment = Alignment.CenterVertically
) {
    ButtonSize.entries.forEach { size ->
        PantrixIconButton(
            imageVector = PantrixIcons.Plus,
            contentDescription = "${size.name} boyutunda düğme",
            onClick = {},
            variant = ButtonVariant.Soft,
            size = size,
            tagKey = "size_${size.name}"
        )
    }
}

Şekil ve stil

İkon düğmesi her platformda tam yuvarlaktır. shape onu değiştirir: ikinci düğme temanın orta yuvarlaklığında (shapes.md), üçüncüsü köşeli (shapes.none).

style düğmenin ölçülerini değiştirir: ikon düğmesi ButtonStyle'ın yalnızca boyutlarını okur. Son düğme yine Medium'dur, ama ikonu 24dp yerine 16dp çizildi. Yalnızca verilen alan değişir, gerisi temanın stilinden gelir.

Row(
    horizontalArrangement = Arrangement.spacedBy(PantrixTheme.spacing.sm),
    verticalAlignment = Alignment.CenterVertically
) {
    PantrixIconButton(
        imageVector = PantrixIcons.Folder,
        contentDescription = "Tam yuvarlak düğme",
        onClick = {},
        variant = ButtonVariant.Soft,
        tagKey = "pill"
    )
    PantrixIconButton(
        imageVector = PantrixIcons.Folder,
        contentDescription = "Az yuvarlak düğme",
        onClick = {},
        variant = ButtonVariant.Soft,
        shape = PantrixTheme.shapes.md,
        tagKey = "rounded"
    )
    PantrixIconButton(
        imageVector = PantrixIcons.Folder,
        contentDescription = "Köşeli düğme",
        onClick = {},
        variant = ButtonVariant.Soft,
        shape = PantrixTheme.shapes.none,
        tagKey = "square"
    )
    PantrixIconButton(
        imageVector = PantrixIcons.Folder,
        contentDescription = "Küçük ikonlu düğme",
        onClick = {},
        variant = ButtonVariant.Soft,
        style = ButtonStyle(medium = ButtonSizeStyle(iconSize = 16.dp)),
        tagKey = "small_icon"
    )
}

Devre dışı

enabled = false düğmeyi soluk çizer ve düğme basış almaz. Dolgusu olan varyant temanın devre dışı dolgusunu alır; dolgusu olmayan Text ve Outline devre dışıyken de dolgusuz kalır, gri bir şekle dönüşmez.

Row(horizontalArrangement = Arrangement.spacedBy(PantrixTheme.spacing.sm)) {
    listOf(ButtonVariant.Text, ButtonVariant.Outline, ButtonVariant.Soft, ButtonVariant.Solid).forEach { variant ->
        PantrixIconButton(
            imageVector = PantrixIcons.Calendar,
            contentDescription = "Takvime ekle",
            onClick = {},
            variant = variant,
            enabled = false,
            tagKey = "disabled_${variant.name}"
        )
    }
}

Başka bir rolde ve kendi renginde

Bir varyantın renkleri temanın primary rolünden gelir, Destructive'inkiler danger rolünden. PantrixColor.buttonColors(variant) aynı varyantı başka bir rolde verir: ilk iki düğme success ve danger rolünde.

Son düğmenin rengi temanın hiçbir rolünde yok: ButtonColors dolguyu ve ikonun rengini doğrudan alır. İkon rengi ayrıca verilmez: düğmenin içerik rengini kendiliğinden alır.

val colors = PantrixTheme.colors
val own = ownColors()
Row(horizontalArrangement = Arrangement.spacedBy(PantrixTheme.spacing.sm)) {
    PantrixIconButton(
        imageVector = PantrixIcons.Check,
        contentDescription = "Onayla",
        onClick = {},
        colors = colors.success.buttonColors(ButtonVariant.Soft),
        tagKey = "approve"
    )
    PantrixIconButton(
        imageVector = PantrixIcons.Close,
        contentDescription = "Reddet",
        onClick = {},
        colors = colors.danger.buttonColors(ButtonVariant.Outline),
        tagKey = "reject"
    )
    PantrixIconButton(
        imageVector = PantrixIcons.Star,
        contentDescription = "Koleksiyona ekle",
        onClick = {},
        colors = ButtonColors(container = own.color, content = own.onColor),
        tagKey = "own_colors"
    )
}

Kendi içeriği: rozetli ikon

İkon yerine içerik alan PantrixIconButton: burada köşesinde rozet olan bir ikon. İçerik düğmenin içerik rengiyle çizilir.

Düğmenin içindekiler, açıklamanın söylediği şeyin resmidir: ekran okuyucu yalnızca açıklamayı duyar. Bu yüzden rozetin sayısı açıklamaya yazılır, "Gelen kutusu, 3 okunmamış"; rozetin kendisi okunmaz. "Yeni mesaj" sayıyı artırır, ikon düğmesine basmak sıfırlar.

var unread by rememberSaveable { mutableIntStateOf(3) }
Row(
    horizontalArrangement = Arrangement.spacedBy(PantrixTheme.spacing.md),
    verticalAlignment = Alignment.CenterVertically
) {
    PantrixIconButton(
        contentDescription = if (unread > 0) "Gelen kutusu, $unread okunmamış" else "Gelen kutusu",
        onClick = { unread = 0 },
        tagKey = "inbox"
    ) {
        PantrixBadgedBox(badge = { if (unread > 0) PantrixBadge(count = unread) }) {
            PantrixIcon(imageVector = PantrixIcons.Inbox, contentDescription = null)
        }
    }
    PantrixButton(
        text = "Yeni mesaj",
        onClick = { unread += 1 },
        variant = ButtonVariant.Outline,
        size = ButtonSize.Small,
        tagKey = "new_message"
    )
}

Açıklaması olmayan düğme

contentDescription = null yalnızca, başka bir şeyin zaten yaptığını yineleyen düğmeye verilir. Burada kartın tamamı basılır ve siparişi açar; sonundaki ok aynı işi yapar ve yalnızca gözle görene bir işarettir.

Böyle bir düğme ekran okuyucudan gizlenir ve klavyeyle üstünde durulmaz: okuyucunun hiç okumayacağı bir yerde odağın durması, hiç durmamasından kötüdür. Fare ve parmak ona yine basar. Bir işe giden tek yol olan düğmenin her zaman bir açıklaması olur.

var opened by rememberSaveable { mutableIntStateOf(0) }
PantrixCard(
    modifier = Modifier.widthIn(max = 360.dp),
    variant = CardVariant.Outlined,
    onClick = { opened += 1 },
    tagKey = "order"
) {
    Row(verticalAlignment = Alignment.CenterVertically) {
        Column(modifier = Modifier.weight(1f)) {
            PantrixText(text = "Sipariş 8F2A-19C4", style = PantrixTheme.typography.callout)
            PantrixText(text = "Yarın teslim edilecek", color = PantrixTheme.colors.textSecondary)
        }
        PantrixIconButton(
            imageVector = PantrixIcons.ChevronForward,
            contentDescription = null,
            onClick = { opened += 1 },
            tagKey = "open_order"
        )
    }
}
PantrixText(
    text = "Sipariş $opened kez açıldı",
    color = PantrixTheme.colors.textSecondary,
    tagKey = "order_opened"
)

API

imageVector

Yalnızca bir ikon gösteren düğme: karedir, size boyutundaki bir düğme kadar yüksektir, varsayılan olarak yuvarlaktır ve çevresinde platformun en küçük dokunma hedefi kadar yer ayrılır. Renklerini variant seçer. Varsayılan olan ButtonVariant.Text'in, devre dışı olsun olmasın, dolgusu yoktur. contentDescription ekran okuyucu için işi adlandırır: "X" değil, "Kapat".

ParametreTürVarsayılanNe olduğu
imageVectorImageVectordüğmenin gösterdiği ikon.
contentDescriptionString?
onClick() -> Unitbir basışın yaptığı.
modifierModifierModifierdüğmenin modifier'ı.
variantButtonVariantButtonVariant.Text
sizeButtonSizeButtonSize.Medium
enabledBooleantruedüğmeye basılıp basılamayacağı: basılamayan düğme devre dışı renklerle çizilir ve hiçbir şey yapmaz.
shapeShapePantrixTheme.shapes.fulldüğmenin köşeleri: başka bir şey söylenmedikçe tam yuvarlak.
colorsButtonColorsvariant.colors()bu çağrının kendi renkleri, variant'ınkilerin yerine.
tagKeyString?nulldüğmenin otomasyon anahtarı: düğme IconButton_<tagKey>'dır, anahtar yoksa çağrıldığı yerden bir anahtar alır. Görünen metin hiçbir zaman anahtar olmaz.
interactionSourceMutableInteractionSource?nulldüğmenin etkileşimleri, dışarı taşınmış: odağı, üstündeki işaretçi ve basışları. Bu null olduğunda kendi kaynağını tutar.
styleButtonStyle?nullbu çağrının kendi stili: kapsayan her stilin üstünde, yoğunluğun altında. Yalnızca verdiği alanlar değişir.

contentDescription

Bir ImageVector yerine herhangi bir content alan PantrixIconButton: hareketli bir ikon ya da rozetli bir ikon.

ParametreTürVarsayılanNe olduğu
contentDescriptionString?
onClick() -> Unitbir basışın yaptığı.
modifierModifierModifierdüğmenin modifier'ı.
variantButtonVariantButtonVariant.Textdüğmenin renkleri: başka bir şey söylenmedikçe kabı olmayan ButtonVariant.Text.
sizeButtonSizeButtonSize.Mediumdüğmenin boyutu: size boyundaki bir düğme ne kadar uzunsa o kadar uzun ve o kadar geniş.
enabledBooleantruedüğmeye basılıp basılamayacağı: basılamayan düğme devre dışı renklerle çizilir ve hiçbir şey yapmaz.
shapeShapePantrixTheme.shapes.fulldüğmenin köşeleri: başka bir şey söylenmedikçe tam yuvarlak.
colorsButtonColorsvariant.colors()bu çağrının kendi renkleri, variant'ınkilerin yerine.
tagKeyString?nulldüğmenin otomasyon anahtarı: düğme IconButton_<tagKey>'dır, anahtar yoksa çağrıldığı yerden bir anahtar alır. Görünen metin hiçbir zaman anahtar olmaz.
interactionSourceMutableInteractionSource?nulldüğmenin etkileşimleri, dışarı taşınmış: odağı, üstündeki işaretçi ve basışları. Bu null olduğunda kendi kaynağını tutar.
styleButtonStyle?nullbu çağrının kendi stili: kapsayan her stilin üstünde, yoğunluğun altında. Yalnızca verdiği alanlar değişir.
content@Composable () -> Unit

ButtonStyle

PantrixButton'ın geometrisi: şekli, basış geri bildirimi ve her ButtonSize için bir yükseklik, bir iç boşluk ve bir ikon boyutu. PantrixIconButton yalnızca boyutları okur.

ParametreTürVarsayılanNe olduğu
shapeShapeSpecShapeSpec.UnspecifiedDüğmenin şekli: Android'de, masaüstünde ve web'de ShapeRole.Full, iOS'ta ShapeRole.Medium.
pressedScaleFloatFloat.NaNBasılıyken ölçek. 1f ölçekleme yok demektir: geri bildirimi durum katmanı taşır.
extraSmallButtonSizeStyleButtonSizeStyle()ButtonSize.ExtraSmall'ın geometrisi.
smallButtonSizeStyleButtonSizeStyle()ButtonSize.Small'ın geometrisi.
mediumButtonSizeStyleButtonSizeStyle()ButtonSize.Medium'un geometrisi.
largeButtonSizeStyleButtonSizeStyle()ButtonSize.Large'ın geometrisi.
extraLargeButtonSizeStyleButtonSizeStyle()ButtonSize.ExtraLarge'ın geometrisi.

ButtonColors

Bir düğmenin boyandığı renkler. ButtonVariant.colors bir varyantın primary rolündeki renklerini, PantrixColor.buttonColors ise aynı öne çıkma derecelerini herhangi bir rolde verir.

ParametreTürVarsayılanNe olduğu
containerColorDolgu. Çerçeveli düğmede ve metin düğmesinde saydamdır.
contentColorEtiketin ve ikonun rengi.
borderColorColor.UnspecifiedKenarın rengi. Kenarı olmayan düğme için Color.Unspecified.

Erişilebilirlik