Přeskočit na hlavní obsah

Stylizace komponent

Komponenty knihovny lze stylovat prostřednictvím update bloku v Jetpack Compose nebo pomocí XML atributů v layoutu. Oba přístupy lze kombinovat.

SecureTextField (vstupní pole)

Atributy a metody se vztahují na všechny tři vstupní komponenty: SecurePanField, SecureExpiryFieldSecureCvvField.

Metody stylování

MetodaParametrPopis
setHint(hint)StringNastaví placeholder text.
setTextColor(color)IntNastaví barvu textu.
setHintColor(color)IntNastaví barvu placeholder textu.
setTextSize(sp)FloatNastaví velikost textu v sp.
setFontFamily(family)StringNastaví rodinu písma dle názvu.
setTypeface(typeface)TypefaceNastaví písmo pomocí instance Typeface.
setBackgroundColor(color)IntNastaví barvu pozadí.
setBorderColor(color)IntNastaví barvu ohraničení v normálním stavu.
setFocusedBorderColor(color)IntNastaví barvu ohraničení při zaměření.
setBorderWidth(widthPx)IntNastaví šířku ohraničení v pixelech.
setBorderWidthDp(widthDp)FloatNastaví šířku ohraničení v dp.
setCornerRadius(radiusPx)FloatNastaví zaoblení rohů v pixelech.
setCornerRadiusDp(radiusDp)FloatNastaví zaoblení rohů v dp.
setErrorColor(color)IntNastaví barvu chyby (text i ohraničení).
setErrorTextSize(sp)FloatNastaví velikost chybového textu v sp.
setPadding(horizontalPx, verticalPx)Int, IntNastaví vnitřní odsazení v pixelech.
setPaddingDp(horizontalDp, verticalDp)Float, FloatNastaví vnitřní odsazení v dp.
Informace

Pro většinu případů doporučujeme používat *Dp varianty setterů (setBorderWidthDp, setCornerRadiusDp, setPaddingDp). Vstupy jsou v dp a knihovna převod na pixely zajistí interně. Parametry těchto metod jsou v API anotované @Dimension(unit = Dimension.DP), takže je zřejmé, jakou jednotku očekávají.

field.setBorderWidthDp(2f)
field.setCornerRadiusDp(12f)

Příklad v Compose (update blok)

SecurePanField(
state = panState,
modifier = Modifier.fillMaxWidth(),
update = {
setBackgroundColor(Color.parseColor("#FAFAFA"))
setBorderColor(Color.parseColor("#1976D2"))
setFocusedBorderColor(Color.parseColor("#0D47A1"))
setBorderWidthDp(2f)
setCornerRadiusDp(12f)
setTextColor(Color.parseColor("#212121"))
setHintColor(Color.parseColor("#9E9E9E"))
setTextSize(16f)
setErrorColor(Color.parseColor("#C62828"))
setPaddingDp(horizontalDp = 14f, verticalDp = 10f)
setFontFamily("sans-serif-medium")
}
)

XML atributy

XML atributFormátPopis
app:secureFieldHintstringPlaceholder text zobrazený v prázdném poli.
app:secureFieldTextColorcolorBarva textu.
app:secureFieldHintColorcolorBarva placeholder textu.
app:secureFieldTextSizedimensionVelikost textu (např. 18sp).
app:secureFieldFontFamilystringRodina písma (např. "monospace", "sans-serif-medium").
app:secureFieldBackgroundColorcolorBarva pozadí pole.
app:secureFieldBorderColorcolorBarva ohraničení v normálním stavu.
app:secureFieldBorderWidthdimensionŠířka ohraničení (např. 2dp).
app:secureFieldCornerRadiusdimensionZaoblení rohů (např. 12dp).
app:secureFieldFocusedBorderColorcolorBarva ohraničení při zaměření (focus).
app:secureFieldErrorColorcolorBarva chybového textu a ohraničení v chybovém stavu.
app:secureFieldErrorTextSizedimensionVelikost chybového textu.
app:secureFieldPaddingHorizontaldimensionHorizontální vnitřní odsazení.
app:secureFieldPaddingVerticaldimensionVertikální vnitřní odsazení.

Stavy ohraničení

Ohraničení pole se automaticky mění podle aktuálního stavu:

StavBarva ohraničeníPriorita
ChybaerrorColorNejvyšší
Zaměřeno (focus)focusedBorderColorStřední
NormálníborderColorNejnižší

Stylování více polí najednou

Pomocí rozšiřující funkce lze aplikovat stejný styl na všechna pole přes update blok:

fun SecureTextField.applyCommonStyle() {
setBackgroundColor(Color.parseColor("#FAFAFA"))
setBorderColor(Color.parseColor("#1976D2"))
setFocusedBorderColor(Color.parseColor("#0D47A1"))
setBorderWidthDp(2f)
setCornerRadiusDp(12f)
setTextColor(Color.parseColor("#212121"))
setTextSize(16f)
}

SecurePanField(
state = panState,
modifier = Modifier.fillMaxWidth(),
update = {
applyCommonStyle()
setFontFamily("sans-serif-medium") // specifické pro PAN pole
}
)
SecureExpiryField(
state = expiryState,
modifier = Modifier.fillMaxWidth(),
update = { applyCommonStyle() }
)
SecureCvvField(
state = cvvState,
modifier = Modifier.fillMaxWidth(),
update = {
applyCommonStyle()
setTypeface(Typeface.MONOSPACE) // specifické pro CVV pole
}
)

Použití android:background

U SecureField lze v XML použít také standardní atribut android:background:

<cz.comgate.sdk.SecurePanField
android:background="#E8F5E9"
... />

Pro čitelnější konfiguraci doporučujeme preferovat atribut app:secureFieldBackgroundColor, který je určen přímo pro stylování pozadí pole.

SecurePayButton (platební tlačítko)

Metody stylování

MetodaParametrPopis
setText(text)StringNastaví text tlačítka.
setButtonTextColor(color)IntNastaví barvu textu (aktivní stav).
setButtonTextSize(sp)FloatNastaví velikost textu v sp.
setButtonFontFamily(family)StringNastaví rodinu písma.
setButtonTypeface(typeface)TypefaceNastaví písmo pomocí instance Typeface.
setButtonBackgroundColor(color)IntNastaví barvu pozadí (aktivní stav).
setButtonBorderColor(color)IntNastaví barvu ohraničení.
setButtonBorderWidth(widthPx)IntNastaví šířku ohraničení v pixelech.
setButtonBorderWidthDp(widthDp)FloatNastaví šířku ohraničení v dp.
setButtonCornerRadius(radiusPx)FloatNastaví zaoblení rohů v pixelech.
setButtonCornerRadiusDp(radiusDp)FloatNastaví zaoblení rohů v dp.
setDisabledBackgroundColor(color)IntNastaví barvu pozadí v deaktivovaném stavu.
setDisabledTextColor(color)IntNastaví barvu textu v deaktivovaném stavu.
setButtonPadding(horizontalPx, verticalPx)Int, IntNastaví vnitřní odsazení v pixelech.
setButtonPaddingDp(horizontalDp, verticalDp)Float, FloatNastaví vnitřní odsazení v dp.
setLoadingAnimationEnabled(enabled)BooleanPovoluje nebo zakazuje shimmer sweep animaci během zpracování platby. Výchozí: true.
Informace

Pro většinu případů doporučujeme používat *Dp varianty setterů (setButtonBorderWidthDp, setButtonCornerRadiusDp, setButtonPaddingDp). Vstupy jsou v dp a knihovna převod na pixely zajistí interně.

Příklad v Compose (update blok)

SecurePayButton(
session = session,
collector = collector,
onPaymentResult = { result -> /* ... */ },
paymentParamsProvider = { /* ... */ },
modifier = Modifier.fillMaxWidth(),
update = {
setText("Zaplatit")
setButtonBackgroundColor(Color.parseColor("#1E88E5"))
setButtonTextColor(Color.WHITE)
setButtonCornerRadiusDp(12f)
setButtonBorderColor(Color.parseColor("#1565C0"))
setButtonBorderWidthDp(1f)
setDisabledBackgroundColor(Color.parseColor("#CFD8DC"))
setDisabledTextColor(Color.parseColor("#78909C"))
setButtonTextSize(16f)
setLoadingAnimationEnabled(true)
}
)

XML atributy

XML atributFormátPopis
app:payButtonTextstringText tlačítka (výchozí: "Pay").
app:payButtonTextColorcolorBarva textu v aktivním stavu.
app:payButtonTextSizedimensionVelikost textu.
app:payButtonFontFamilystringRodina písma.
app:payButtonBackgroundColorcolorBarva pozadí v aktivním stavu.
app:payButtonBorderColorcolorBarva ohraničení.
app:payButtonBorderWidthdimensionŠířka ohraničení.
app:payButtonCornerRadiusdimensionZaoblení rohů.
app:payButtonDisabledBackgroundColorcolorBarva pozadí v deaktivovaném stavu.
app:payButtonDisabledTextColorcolorBarva textu v deaktivovaném stavu.
app:payButtonPaddingHorizontaldimensionHorizontální vnitřní odsazení.
app:payButtonPaddingVerticaldimensionVertikální vnitřní odsazení.
app:payButtonLoadingAnimationbooleanPovoluje/zakazuje shimmer sweep animaci během zpracování platby. Výchozí: true.

Automatický deaktivovaný stav

Pokud nejsou explicitně nastaveny barvy pro deaktivovaný stav (payButtonDisabledBackgroundColor, payButtonDisabledTextColor), tlačítko automaticky vypočítá tlumenou variantu z aktivních barev snížením průhlednosti na 50 %.

Animace během zpracování platby

Po stisku tlačítka je nad jeho obsahem zobrazena shimmer sweep animace — poloprůhledný třpytivý pruh, který neustále přejíždí zleva doprava přes tlačítko. Tlačítko přitom zachovává plnou barvu pozadí a původní text — animace nese informaci o probíhajícím zpracování.

Animaci lze vypnout v update bloku nebo přímo na stavu:

SecurePayButton(
// ...
update = {
setLoadingAnimationEnabled(false)
}
)

Po vypnutí animace zůstává tlačítko během zpracování v klidném deaktivovaném vzhledu bez vizualního efektu.

SecurePaymentStatusView (stavový banner)

Použití v Compose

V Compose se komponenta používá přes rememberPaymentStatusState(). Vizuální stylování není v Compose API přímo exponováno — komponenta automaticky aplikuje příslušné barvy (zelená/oranžová/červená) podle stavu platby. Překlad zpráv lze nastavit přes translation na stavu:

val statusState = rememberPaymentStatusState()
statusState.translation = Translation.Czech

SecurePaymentStatusView(state = statusState)

// Zobrazení výsledku:
statusState.showStatus(paymentResult)
// nebo:
statusState.showError("Vlastní chybová zpráva")
// Skrytí:
statusState.clear()

XML atributy

XML atributFormátPopis
app:statusViewTextstringPočáteční text zprávy (volitelné).
app:statusViewTextColorcolorBarva textu.
app:statusViewTextSizedimensionVelikost textu.
app:statusViewFontFamilystringRodina písma.
app:statusViewBackgroundColorcolorBarva pozadí banneru.
app:statusViewBorderColorcolorBarva ohraničení.
app:statusViewBorderWidthdimensionŠířka ohraničení.
app:statusViewCornerRadiusdimensionZaoblení rohů.
app:statusViewPaddingHorizontaldimensionHorizontální vnitřní odsazení.
app:statusViewPaddingVerticaldimensionVertikální vnitřní odsazení.

Metody stylování

MetodaParametrPopis
setTextColor(color)IntNastaví barvu textu.
setTextSize(sp)FloatNastaví velikost textu v sp.
setFontFamily(family)StringNastaví rodinu písma.
setTypeface(typeface)TypefaceNastaví písmo pomocí instance Typeface.
setStatusBackgroundColor(color)IntNastaví barvu pozadí.
setBorderColor(color)IntNastaví barvu ohraničení.
setBorderWidth(widthPx)IntNastaví šířku ohraničení v pixelech.
setBorderWidthDp(widthDp)FloatNastaví šířku ohraničení v dp.
setCornerRadius(radiusPx)FloatNastaví zaoblení rohů v pixelech.
setCornerRadiusDp(radiusDp)FloatNastaví zaoblení rohů v dp.
setStatusPadding(horizontalPx, verticalPx)Int, IntNastaví vnitřní odsazení v pixelech.
setStatusPaddingDp(horizontalDp, verticalDp)Float, FloatNastaví vnitřní odsazení v dp.
Informace

Pro většinu případů doporučujeme používat *Dp varianty setterů (setBorderWidthDp, setCornerRadiusDp, setStatusPaddingDp). Vstupy jsou v dp a knihovna převod na pixely zajistí interně.

Tip

Komponenta začíná ve stavu GONE (skrytá). Zobrazí se automaticky po zavolání showStatus() a skryje se po zavolání clear(). Více informací o zobrazování stavů naleznete v sekci Výsledky platby.