---
updatedAt: 2026-02-25T01:15:24.000Z
---

Fetch the complete documentation index at: https://developer.paymentology.com/bankinglive/llms.txt. Use this file to discover all available pages before exploring further. Append .md to any documentation page URL to get its markdown version.

# Styling & Theming

# Android SDK: Styling & Theming

Customize colors, typography, spacing, and component styles throughout the Digital Card Engine UI SDK using the centralized `StyleConfiguration` system.

Prerequisites:

* SDK initialized with `DigitalCardEngineSDK.initialize(...)`
* Access to the `sdk.styleConfiguration` instance

## StyleConfiguration Overview

The SDK uses a single mutable `StyleConfiguration` object that controls the visual appearance of all UI components. This matches the iOS SDK design for cross-platform consistency.

```kotlin
val sdk = DigitalCardEngineSDK()
// After initialization, customize appearance
sdk.styleConfiguration.palette.secondary = Color(0xFFFF5722)
sdk.styleConfiguration.spacing = 12f
sdk.styleConfiguration.currencySymbol = "$"
```

## Palette (Color System)

The `Palette` defines semantic colors used throughout the SDK. All colors follow Material Design 3 naming conventions and match iOS exactly.

```kotlin
data class Palette(
    var surface: Color = Color(0xFFFFFFFF),              // Backgrounds
    var onSurface: Color = Color(0xFF1C1B1B),            // Primary text
    var onSurfaceVariant: Color = Color(0xFF5C5F66),     // Secondary text
    var secondary: Color = Color(0xFF2353C8),            // Brand/accent
    var tertiary: Color = Color(0xFF4CAF50),             // Success/positive
    var outlineVariant: Color = Color(0xFFE4E6EB),       // Borders/dividers
    var surfaceContainerHighest: Color = Color(0xFFE0E3E8) // Subtle backgrounds
)
```

### Color Usage Guide

| Color                     | Default   | Usage                                |
| ------------------------- | --------- | ------------------------------------ |
| `surface`                 | `#FFFFFF` | Card backgrounds, container surfaces |
| `onSurface`               | `#1C1B1B` | Primary text (titles, card labels)   |
| `onSurfaceVariant`        | `#5C5F66` | Secondary text (subtitles, metadata) |
| `secondary`               | `#2353C8` | Action buttons, brand elements       |
| `tertiary`                | `#4CAF50` | Positive amounts, success indicators |
| `outlineVariant`          | `#E4E6EB` | Dividers, borders, separators        |
| `surfaceContainerHighest` | `#E0E3E8` | Card backgrounds when stacked        |

### Customizing Colors

```kotlin
// Apply your brand colors
sdk.styleConfiguration.palette = StyleConfiguration.Palette(
    surface = Color.White,
    onSurface = Color(0xFF1A1A1A),
    onSurfaceVariant = Color(0xFF666666),
    secondary = Color(0xFF00A86B),        // Your brand color
    tertiary = Color(0xFF4CAF50),
    outlineVariant = Color(0xFFE0E0E0),
    surfaceContainerHighest = Color(0xFFF5F5F5)
)
```

## Typography (Fonts & TypeScale)

The SDK uses Material Design 3 typography scales. Each scale has a regular and emphasized (bold) variant.

```kotlin
data class Fonts(
    var titleLarge: TypeScale,
    var titleMedium: TypeScale,
    var titleSmall: TypeScale,
    var labelLarge: TypeScale,
    var labelMedium: TypeScale,
    var labelSmall: TypeScale,
    var bodyLarge: TypeScale,
    var bodyMedium: TypeScale,
    var bodySmall: TypeScale
)

data class TypeScale(
    var textStyle: TextStyle,          // Regular weight
    var textStyleEmphasized: TextStyle // Bold/emphasized weight
)
```

### Typography Scale Reference

| Scale         | Size | Letter Spacing | Usage                         |
| ------------- | ---- | -------------- | ----------------------------- |
| `titleLarge`  | 22sp | 0sp            | Screen titles, large headings |
| `titleMedium` | 16sp | 0.15sp         | Section titles, card titles   |
| `titleSmall`  | 14sp | 0.1sp          | Small headings, labels        |
| `labelLarge`  | 14sp | 0.1sp          | Button text, prominent labels |
| `labelMedium` | 12sp | 0.5sp          | Input labels, metadata        |
| `labelSmall`  | 11sp | 0.5sp          | Captions, small metadata      |
| `bodyLarge`   | 16sp | 0.5sp          | Primary body text             |
| `bodyMedium`  | 14sp | 0.25sp         | Secondary body text           |
| `bodySmall`   | 12sp | 0.4sp          | Small body text, footnotes    |

### Custom Typography

```kotlin
import androidx.compose.ui.text.TextStyle
import androidx.compose.ui.text.font.FontFamily
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.unit.sp

// Apply custom font family
val customFonts = Fonts(
    titleLarge = TypeScale(
        textStyle = TextStyle(
            fontFamily = FontFamily.SansSerif,
            fontWeight = FontWeight.Normal,
            fontSize = 22.sp,
            letterSpacing = 0.sp
        ),
        textStyleEmphasized = TextStyle(
            fontFamily = FontFamily.SansSerif,
            fontWeight = FontWeight.Bold,
            fontSize = 22.sp,
            letterSpacing = 0.sp
        )
    ),
    // ... customize other scales
)

sdk.styleConfiguration.fonts = customFonts
```

### Using Custom Font Families

```kotlin
import androidx.compose.ui.text.font.Font
import androidx.compose.ui.text.font.FontFamily
import androidx.compose.ui.text.font.FontWeight

val MyFontFamily = FontFamily(
    Font(R.font.my_font_regular, FontWeight.Normal),
    Font(R.font.my_font_medium, FontWeight.Medium),
    Font(R.font.my_font_bold, FontWeight.Bold)
)

sdk.styleConfiguration.fonts.bodyMedium = TypeScale(
    textStyle = TextStyle(
        fontFamily = MyFontFamily,
        fontWeight = FontWeight.Normal,
        fontSize = 14.sp
    ),
    textStyleEmphasized = TextStyle(
        fontFamily = MyFontFamily,
        fontWeight = FontWeight.Bold,
        fontSize = 14.sp
    )
)
```

## Component-Specific Properties

### CardListViewProperties

Control card list behavior and layout.

```kotlin
data class CardListViewProperties(
    var title: Boolean = true,                           // Show "My Cards" header
    var actionButton: Boolean = true,                    // Show "Add Card" button
    var dividers: Boolean = true,                        // Show separators
    var cardListStyle: CardListViewStyle = LargeStyle    // Layout density
)

enum class CardListViewStyle {
    DefaultStyle,  // Compact rows for dashboards
    LargeStyle     // Spacious cards (default)
}
```

Usage:

```kotlin
sdk.styleConfiguration.cardListViewProperties = CardListViewProperties(
    title = false,
    actionButton = true,
    dividers = true,
    cardListStyle = CardListViewStyle.DefaultStyle
)
```

### CardDetailsViewProperties

Control card details screen behavior.

```kotlin
data class CardDetailsViewProperties(
    var actionButton: Boolean = true,                    // Show action buttons
    var slider: Boolean = false,                         // Enable card slider
    var cardInfoStyle: CardDetailsViewStyle = DetailStyle, // Info density
    var useFetchedImages: Boolean = false                // Use fetched card art
)

enum class CardDetailsViewStyle {
    BriefStyle,    // Compact info
    DetailStyle    // Full details (default)
}
```

Usage:

```kotlin
sdk.styleConfiguration.cardDetailsViewProperties = CardDetailsViewProperties(
    actionButton = true,
    slider = true,
    cardInfoStyle = CardDetailsViewStyle.DetailStyle,
    useFetchedImages = true
)
```

## Spacing

Global spacing multiplier applied to paddings and gaps throughout the SDK.

```kotlin
// Default is 8dp
sdk.styleConfiguration.spacing = 12f  // Increase spacing
sdk.styleConfiguration.spacing = 4f   // Decrease spacing
```

## Currency Symbol

Set the currency symbol displayed with monetary amounts.

```kotlin
sdk.styleConfiguration.currencySymbol = "$"   // US Dollar
sdk.styleConfiguration.currencySymbol = "€"   // Euro
sdk.styleConfiguration.currencySymbol = "R"   // South African Rand
sdk.styleConfiguration.currencySymbol = "£"   // British Pound
```

## Applying Styles to Components

### Global Application (Recommended)

Apply styles once at app initialization:

```kotlin
class MyApp : Application() {
    lateinit var sdk: DigitalCardEngineSDK
    
    override fun onCreate() {
        super.onCreate()
        
        sdk = DigitalCardEngineSDK()
        sdk.initialize(/* ... */)
        
        // Apply global theme
        applyCustomTheme(sdk.styleConfiguration)
    }
    
    private fun applyCustomTheme(config: StyleConfiguration) {
        config.palette = Palette(
            secondary = Color(0xFF00A86B),
            tertiary = Color(0xFF4CAF50)
        )
        config.currencySymbol = "$"
        config.spacing = 12f
    }
}
```

### Per-Screen Customization

Use `CompositionLocalProvider` to apply custom styles to specific screens:

```kotlin
import androidx.compose.runtime.CompositionLocalProvider
import com.paymentology.digital_card_engine_sdk_android.ui.theme.LocalStyleConfiguration

@Composable
fun CustomStyledCardList(sdk: DigitalCardEngineSDK) {
    val customConfig = StyleConfiguration().apply {
        palette = Palette(secondary = Color(0xFFFF5722))
    }
    
    CompositionLocalProvider(LocalStyleConfiguration provides customConfig) {
        UILibrary.CardListView(
            sdk = sdk,
            onCardSelected = { /* ... */ }
        )
    }
}
```

### Component-Level Styling

Pass style properties directly to individual components:

```kotlin
import com.paymentology.digital_card_engine_sdk_android.ui.*

@Composable
fun CustomizedCardOverview(card: CardEntity, sdk: DigitalCardEngineSDK) {
    UILibrary.CardOverview(
        card = card,
        properties = CardOverviewProperties(
            cardInfo = CardInfo.Detail,
            actionButton = true,
            cardWidgetStyle = CardWidgetStyle.Large
        ),
        style = CardOverviewStyleProperties(
            externalPadding = 24f,
            internalHorizontalPadding = 20f,
            internalVerticalPadding = 16f,
            radius = 16f
        ),
        sdk = sdk
    )
}
```

## Style Properties Reference

### CardListViewStyleProperties

```kotlin
data class CardListViewStyleProperties(
    var internalHorizontalPadding: Float = 16f,  // Card content horizontal padding
    var internalVerticalPadding: Float = 12f,    // Card content vertical padding
    var externalPadding: Float = 16f,            // List container padding
    var internalGap: Float = 16f,                // Spacing between cards
    var radius: Float = 12f                      // Card corner radius
)
```

### CardOverviewStyleProperties

```kotlin
data class CardOverviewStyleProperties(
    var externalPadding: Float = 16f,            // Container padding
    var internalHorizontalPadding: Float = 16f,  // Content horizontal padding
    var internalVerticalPadding: Float = 16f,    // Content vertical padding
    var radius: Float = 16f,                     // Corner radius
    var titleTextStyle: TextStyle? = null,       // Optional title override
    var balanceTextStyle: TextStyle? = null      // Optional balance override
)
```

### TransactionsCardStyleProperties

```kotlin
data class TransactionsCardStyleProperties(
    var externalPadding: Float = 16f,
    var internalHorizontalPadding: Float = 16f,
    var internalVerticalPadding: Float = 12f,
    var internalGap: Float = 12f,
    var radius: Float = 12f
)
```

## Best Practices

1. **Apply globally**: Set styles once at app startup via `sdk.styleConfiguration`
2. **Use semantic colors**: Leverage the Palette system rather than hardcoding colors
3. **Maintain consistency**: Keep spacing and typography consistent across screens
4. **Test accessibility**: Ensure text contrasts meet WCAG standards
5. **Avoid per-component overrides**: Only override when absolutely necessary
6. **Document custom themes**: Keep a reference of your color/font choices

## Complete Example

```kotlin
import android.app.Application
import androidx.compose.ui.graphics.Color
import com.paymentology.digital_card_engine_sdk_android.DigitalCardEngineSDK
import com.paymentology.digital_card_engine_sdk_android.ui.*

class MyApp : Application() {
    lateinit var sdk: DigitalCardEngineSDK
    
    override fun onCreate() {
        super.onCreate()
        
        sdk = DigitalCardEngineSDK()
        sdk.initialize(/* ... */)
        
        // Apply comprehensive theme
        with(sdk.styleConfiguration) {
            // Colors
            palette = Palette(
                surface = Color.White,
                onSurface = Color(0xFF1A1A1A),
                onSurfaceVariant = Color(0xFF666666),
                secondary = Color(0xFF00A86B),
                tertiary = Color(0xFF4CAF50),
                outlineVariant = Color(0xFFE0E0E0),
                surfaceContainerHighest = Color(0xFFF5F5F5)
            )
            
            // Global settings
            spacing = 12f
            currencySymbol = "$"
            
            // Card list preferences
            cardListViewProperties = CardListViewProperties(
                title = true,
                actionButton = true,
                dividers = true,
                cardListStyle = CardListViewStyle.LargeStyle
            )
            
            // Card details preferences
            cardDetailsViewProperties = CardDetailsViewProperties(
                actionButton = true,
                slider = false,
                cardInfoStyle = CardDetailsViewStyle.DetailStyle,
                useFetchedImages = true
            )
        }
    }
}
```

## Troubleshooting

**Styles not applying**: Ensure you modify `sdk.styleConfiguration` after `initialize()` but before rendering UI components.

**Colors look wrong**: Verify you're using `Color(0xFFRRGGBB)` format with the alpha channel (`FF`).

**Fonts not loading**: Check that custom font resources are in `res/font/` and properly referenced in `FontFamily`.

**Per-screen styles not working**: Ensure `CompositionLocalProvider` wraps the component tree where custom styles should apply.