Pantrix UI

Switch Button

Bir anahtar: açık ya da kapalı olan ve hemen uygulanan bir ayar ile neyin anahtarı olduğunu söyleyen etiketi.

import com.pantrixui.components.elements.switchbutton.PantrixSwitchButton

Örnekler

Etiket ve yardım metni

En yalın hâli: checked durumu okur, onCheckedChange istenen değeri bildirir. İz, etiket ve yardım metni tek bir hedeftir: yazıya basmak da anahtarı çevirir.

Başparmağı sürükle: izin ortasını geçip bırakılırsa anahtar döner. Ortayı geçmeden bırakılırsa yerine kayar ve hiçbir şey bildirilmez.

var notifications by rememberSaveable { mutableStateOf(true) }
PantrixSwitchButton(
    checked = notifications,
    onCheckedChange = { notifications = it },
    label = "Bildirimler",
    supportingText = "Sipariş güncellemeleri ve hatırlatmalar",
    tagKey = "notifications"
)

Etiketsiz: uygulamanın kendi satırında

Sözcükleri başta, anahtarı sonda olan bir satır uygulamanın kendi satırıdır: yazı ayrı bir PantrixText'tir, anahtar etiketsizdir. Anahtarın adını ekran okuyucuya contentDescription söyler.

Bu düzende yazı hedefin parçası değildir: basılan yer anahtar ve çevresinde ayrılan dokunma hedefidir.

var wifi by rememberSaveable { mutableStateOf(false) }
Row(modifier = Modifier.widthIn(max = 360.dp), verticalAlignment = Alignment.CenterVertically) {
    PantrixText(text = "Wi-Fi", modifier = Modifier.weight(1f))
    PantrixSwitchButton(
        checked = wifi,
        onCheckedChange = { wifi = it },
        contentDescription = "Wi-Fi",
        tagKey = "wifi"
    )
}

Hata

error yardım metnini temanın danger rolüne çevirir ve ekran okuyucuya girdinin geçersiz olduğu söylenir. Anahtarın kendisi renklerini korur: anahtar bir ayardır, yanlış olabilen bir cevap onay kutusunun işidir.

Burada hatayı örnek kendisi hesaplar: anahtar kapalıyken error true'dur. Anahtarı aç: metin eski rengine döner.

var location by rememberSaveable { mutableStateOf(false) }
PantrixSwitchButton(
    checked = location,
    onCheckedChange = { location = it },
    label = "Konum",
    supportingText = if (location) "Yakınınızdaki mağazalar gösterilir" else "Konum kapalıyken mağaza aranamaz",
    error = !location,
    tagKey = "location"
)

Bir forma bağlı ayar

field alan PantrixSwitchButton bir formun alanına bağlıdır: değerini, hatasını ve adını alandan alır; checked ve onCheckedChange verilmez. Alanın kimliği otomasyon anahtarıdır: test etiketi SwitchButton_two_step olur.

İki adımlı giriş kapalıyken "Kaydet"e bas: Rules.mustBeTrue kuralının mesajı yardım metninin yerine geçer ve odak anahtara gider. Anahtarı açıp yeniden dene: uygulamanın snackbar'ı ayarların kaydedildiğini söyler.

val snackbars = LocalPantrixSnackbars.current
val scope = rememberCoroutineScope()
val form = rememberFormState()
PantrixSwitchButton(
    field = form.field("two_step", initial = false, Rules.mustBeTrue("Kuruluşunuz bunu şart koşuyor")),
    label = "İki adımlı giriş",
    supportingText = "Her girişte kısa mesajla bir kod gelir"
)
PantrixButton(
    text = "Kaydet",
    onClick = {
        scope.launch { form.submit { snackbars?.show(message = "Ayarlar kaydedildi", tagKey = "saved") } }
    },
    form = form,
    tagKey = "save_settings"
)

Devre dışı ve salt okunur

enabled = false anahtarı devre dışı renklerle çizer: basış ve sürükleme almaz, ekran okuyucuya devre dışı olduğu söylenir. Açık mı kapalı mı olduğunu başparmağın yeri yine gösterir.

onCheckedChange = null ise anahtar salt okunurdur: basış, sürükleme ve odak almaz, renkleri değişmez, adını ve durumunu yine söyler.

PantrixSwitchButton(checked = true, onCheckedChange = {}, enabled = false, label = "Devre dışı", tagKey = "off")
PantrixSwitchButton(
    checked = true,
    onCheckedChange = null,
    label = "Salt okunur",
    supportingText = "Çevrilmez; yalnızca durumunu gösterir",
    tagKey = "read_only"
)

Kendi renkleri

colors yalnızca verilen alanları değiştirir: burada açık izin ve açık başparmağın rengi verildi. Anahtarı kapat: iz, başparmak ve kenar temanın renklerindedir. Arada, başparmak kaydıkça iz ve başparmak bir renkten ötekine döner.

Uygulamanın moru temanın hiçbir rolünde yok; böyle bir izin üstündeki başparmağın rengini de çağıran verir. Devre dışı bir anahtar, renk verilse de temanın renkleriyle çizilir.

val own = ownColors()
var batterySaver by rememberSaveable { mutableStateOf(true) }
PantrixSwitchButton(
    checked = batterySaver,
    onCheckedChange = { batterySaver = it },
    label = "Pil tasarrufu",
    supportingText = "Açıkken izin ve başparmağın rengi dışarıdan verildi; kapalıyken temanınkiler",
    colors = SwitchColors(checkedTrack = own.color, checkedThumb = own.onColor),
    tagKey = "battery_saver"
)

Stil

style tek bir anahtarın geometrisini değiştirir. Yalnızca verilen alanlar değişir; gerisi temanın ve platformun stilinden gelir.

İlk anahtara iOS stilinin üç alanı verildi ve her platformda öyle çizilir: başparmak hep beyazdır (thumbAlwaysLight), altında bir gölge vardır (thumbShadow) ve kapalı izin kenarı yoktur (strokeWidth = 0.dp). İkincisi daha büyük bir izdir: izin eni ve boyu ile başparmağın üç hâldeki boyu birlikte verildi. Etiketi de labelStyle ile temanın callout'uyla, kalın yazıldı; iz o yazının ilk satırında durur.

var lightThumb by rememberSaveable { mutableStateOf(true) }
var largeTrack by rememberSaveable { mutableStateOf(false) }
PantrixSwitchButton(
    checked = lightThumb,
    onCheckedChange = { lightThumb = it },
    label = "Beyaz başparmak, gölgeli ve kenarsız",
    style = SwitchStyle(strokeWidth = 0.dp, thumbAlwaysLight = true, thumbShadow = 2.dp),
    tagKey = "light_thumb"
)
PantrixSwitchButton(
    checked = largeTrack,
    onCheckedChange = { largeTrack = it },
    label = "Büyük iz",
    style = SwitchStyle(
        trackWidth = 64.dp,
        trackHeight = 36.dp,
        thumbSizeOff = 28.dp,
        thumbSizeOn = 28.dp,
        thumbSizePressed = 28.dp
    ),
    tagKey = "large_track",
    labelStyle = PantrixTheme.typography.callout.copy(fontWeight = FontWeight.Bold)
)

Anahtar sonda

Bir ayarlar ekranı: iz etiketin sonunda (controlPosition = ControlPosition.End). Satırlar sütunun genişliğini alır (Modifier.fillMaxWidth()), izler alt alta, sütunun sonunda durur; uzun bir etiket kalan yerde sarar.

var wifi by rememberSaveable { mutableStateOf(true) }
var saver by rememberSaveable { mutableStateOf(false) }
Column(Modifier.widthIn(max = 360.dp)) {
    PantrixSwitchButton(
        checked = wifi,
        onCheckedChange = { wifi = it },
        modifier = Modifier.fillMaxWidth(),
        label = "Wi-Fi",
        tagKey = "wifi_end",
        controlPosition = ControlPosition.End
    )
    PantrixSwitchButton(
        checked = saver,
        onCheckedChange = { saver = it },
        modifier = Modifier.fillMaxWidth(),
        label = "Pil tasarrufu",
        supportingText = "Arka plandaki yenilemeleri ve bazı görsel etkileri kısar",
        tagKey = "saver_end",
        controlPosition = ControlPosition.End
    )
}

API

checked

Bir anahtar: açık ya da kapalı olan ve hemen uygulanan bir ayar ile neyin anahtarı olduğunu söyleyen etiketi.

ParametreTürVarsayılanNe olduğu
checkedBooleanAnahtarın açık olup olmadığı.
onCheckedChange((Boolean) -> Unit)?Kullanıcının istediği değerle, yani checked'in tersiyle çağrılır. Anahtar kendiliğinden bir şey değiştirmez: checked ne diyorsa odur. Null verilirse anahtar salt okunurdur.
modifierModifierModifierSatırın modifier'ı.
enabledBooleantrueAnahtarın çevrilip çevrilemeyeceği. Çevrilemeyen anahtar devre dışı renklerle çizilir ve devre dışı olduğunu söyler.
labelString?nullİzin yanındaki metin: hedefin parçasıdır ve ekran okuyucu için anahtarın adıdır.
supportingTextString?nullEtiketin altında, daha küçük bir yazıyla duran yardım. error true iken mesajın kendisidir.
errorBooleanfalseDeğerin yanlış olup olmadığı: yardım metni danger rolüne döner ve ekran okuyucuya girdinin geçersiz olduğu söylenir.
styleSwitchStyle?nullBu çağrının kendi stili: çevresindeki her stili ezer, yoğunluk ona da uygulanır. Yalnızca verdiği alanlar değişir ve her platformda değişir.
colorsSwitchColors?nullBu anahtarın kendi renkleri: verilenler kullanılır, gerisi temanın renklerinde kalır. Devre dışı bir anahtar temanın renklerini korur.
contentDescriptionString?nullEkran okuyucunun anahtar için söylediği. label verilmeyen anahtarın adıdır: sözcükleri başka bir yerinde duran, uygulamanın kendi satırında olduğu gibi. Etiket varsa onun yerine söylenir.
tagKeyString?nullAnahtarın otomasyon anahtarı: satır SwitchButton_<tagKey> diye etiketlenir. Bir değişiklik, yeni değeri taşıyan bir SwitchButton olayı olarak bildirilir. Olay, anahtarın etiket metnini asla taşımaz.
interactionSourceMutableInteractionSource?nullAnahtarın dışarı taşınan etkileşimleri: basışları, sürüklemeleri ve odağı. Null verilirse anahtar kendi kaynağını tutar.
labelStyleTextStylePantrixTheme.typography.labeletiketin yazı stili: verilmezse temanın label stili. İz, her boyda onun ilk satırında durur. İçindeki bir renk, anahtar etkinken etiketin rengidir; devre dışı bir anahtar etiketi devre dışı renkle yazar.
controlPositionControlPositionControlPosition.Startizin durduğu yer: etiketin önü ya da bir ayarlar ekranındaki gibi arkası. Arkasındaysa iz satıra verilen genişliğin sonunda durur, Modifier.fillMaxWidth() onu ötekilerle hizalar; satıra genişlik verilmemişse etiketin hemen ardındadır. Etiket izin bıraktığı yerde sarar.

field

Bir formun alanına bağlı anahtar: değeri, hatası ve adı field'dan gelir.

ParametreTürVarsayılanNe olduğu
fieldFormField<Boolean>Anahtarın gösterdiği ve değiştirdiği alan.
modifierModifierModifierSatırın modifier'ı.
enabledBooleantrueAnahtarın çevrilip çevrilemeyeceği.
labelString?nullİzin yanındaki metin: hedefin parçasıdır ve ekran okuyucu için anahtarın adıdır.
supportingTextString?nullAlanın orada gösterecek bir hatası yokken etiketin altında duran yardım.
styleSwitchStyle?nullBu çağrının kendi stili: çevresindeki her stili ezer, yoğunluk ona da uygulanır. Yalnızca verdiği alanlar değişir ve her platformda değişir.
colorsSwitchColors?nullBu anahtarın kendi renkleri: verilenler kullanılır, gerisi temanın renklerinde kalır. Devre dışı bir anahtar temanın renklerini korur.
contentDescriptionString?nulllabel verilmeyen anahtar için, ya da etiketin yerine, ekran okuyucunun söylediği.
labelStyleTextStylePantrixTheme.typography.labeletiketin yazı stili: verilmezse temanın label stili.
controlPositionControlPositionControlPosition.Startizin durduğu yer: etiketin önü ya da bir ayarlar ekranındaki gibi arkası. Arkasındaysa iz satıra verilen genişliğin sonunda durur, Modifier.fillMaxWidth() onu ötekilerle hizalar; satıra genişlik verilmemişse etiketin hemen ardındadır. Etiket izin bıraktığı yerde sarar.

SwitchStyle

PantrixSwitchButton'ın izi ve başparmağı: her birinin ne kadar büyük olduğu, izin kenarı ve başparmağın görünüşü.

ParametreTürVarsayılanNe olduğu
trackWidthDpDp.Unspecifiedİzin eni, kenarı dahil.
trackHeightDpDp.Unspecifiedİzin boyu, kenarı dahil. İzin uçları boyu kadar yuvarlaktır.
thumbSizeOffDpDp.UnspecifiedAnahtar kapalıyken başparmağın eni ve boyu.
thumbSizeOnDpDp.UnspecifiedAnahtar açıkken başparmağın eni ve boyu.
thumbSizePressedDpDp.UnspecifiedBasılıyken ya da sürüklenirken başparmağın eni ve boyu.
strokeWidthDpDp.UnspecifiedKapalı bir izin kenarının kalınlığı. Sıfır verilirse kenar çizilmez.
thumbAlwaysLightBoolean?nullTrue, iOS'taki gibi, tema ve durum ne olursa olsun başparmağı beyaz tutar. False, Material'daki gibi, başparmağı kapalıyken kenar renginde, açıkken izin dolgusuyla eşlenen renkte çizer. Null belirtilmemiş demektir.
thumbShadowDpDp.UnspecifiedBaşparmağın izden ne kadar yüksekte durduğu: altındaki gölgenin boyutu. Sıfır verilirse gölge çizilmez.

SwitchColors

Temanın renklerini almayan bir anahtarda PantrixSwitchButton'ın boyandığı renkler: verilen renk kullanılır, verilmeyen temanın rolünde kalır.

ParametreTürVarsayılanNe olduğu
checkedTrackColorColor.UnspecifiedAnahtar açıkken izin dolgusu. Verilmezse temanın primary rengidir.
checkedThumbColorColor.UnspecifiedAnahtar açıkken başparmak: checkedTrack üstünde belirgin duran renk. Verilmezse primary rolünün onColor'ıdır, stil başparmağı açık renkli tutuyorsa beyazdır.
uncheckedTrackColorColor.UnspecifiedAnahtar kapalıyken izin dolgusu. Verilmezse temanın borderStrong renginin soluk bir tonudur.
uncheckedThumbColorColor.UnspecifiedAnahtar kapalıyken başparmak: uncheckedTrack üstünde belirgin duran renk. Verilmezse temanın borderStrong rengidir, stil başparmağı açık renkli tutuyorsa beyazdır.
borderColorColor.UnspecifiedStil bir kenar çiziyorsa, kapalı bir izin kenarı. Verilmezse temanın borderStrong rengidir: kapalı bir anahtar, kenarı ve başparmağıyla görülür.

Erişilebilirlik