Personnaliser les styles des cartes de contenu
Les cartes de contenu de Braze ont une présentation par défaut. Cet article couvre les options de style pour vos cartes de contenu afin de vous aider à correspondre à l’identité de votre marque. Pour obtenir un aperçu des types d’options de personnalisation dont vous disposez avec les cartes de contenu, voir Aperçu de la personnalisation.
Personnaliser le style personnalisé
L’interface utilisateur par défaut des cartes de contenu est importée de la couche d’interface utilisateur du SDK de Braze. À partir de là, vous pouvez modifier certaines parties du style de la carte, l’ordre dans lequel les cartes sont affichées et la façon dont le flux est présenté à vos utilisateurs.
Les propriétés des cartes de contenu telles que title
, cardDescription
, imageUrl
, etc., sont directement modifiables dans le tableau de bord, ce qui constitue la méthode préférée pour modifier ces informations.
Par défaut, les cartes de contenu SDK Android et FireOS correspondent aux directives d’interface utilisateur standard d’Android afin d’offrir une expérience fluide. Vous pouvez voir ces styles par défaut dans le fichier res/values/styles.xml
dans la distribution du SDK de Braze :
1
2
3
4
5
6
7
8
9
10
11
<style name="Braze.ContentCards.CaptionedImage.Description">
<item name="android:textColor">@color/com_braze_description</item>
<item name="android:textSize">15.0sp</item>
<item name="android:includeFontPadding">false</item>
<item name="android:paddingBottom">8.0dp</item>
<item name="android:layout_marginLeft">10.0dp</item>
<item name="android:layout_marginRight">10.0dp</item>
<item name="android:layout_marginTop">8.0dp</item>
<item name="android:layout_width">match_parent</item>
<item name="android:layout_below">@id/com_braze_content_cards_captioned_image_card_title_container</item>
</style>
Pour personnaliser le style des cartes de contenu, remplacez ce style par défaut. Pour remplacer un style, copiez-le dans son intégralité dans le fichier styles.xml
dans votre projet et apportez des modifications. L’ensemble du style doit être copié dans votre fichier local styles.xml
pour que tous les attributs soient correctement définis.
1
2
3
4
5
6
7
8
9
<style name="Braze.ContentCardsDisplay">
<item name="android:background">@color/mint</item>
<item name="android:cacheColorHint">@color/mint</item>
<item name="android:divider">@android:color/transparent</item>
<item name="android:dividerHeight">16.0dp</item>
<item name="android:paddingLeft">12.5dp</item>
<item name="android:paddingRight">5.0dp</item>
<item name="android:scrollbarStyle">outsideInset</item>
</style>
1
2
3
4
<style name="Braze.ContentCardsDisplay">
<item name="android:background">@color/mint</item>
<item name="android:cacheColorHint">@color/mint</item>
</style>
Par défaut, les cartes de contenu SDK Android et FireOS correspondent aux directives d’interface utilisateur standard d’Android afin d’offrir une expérience fluide.
Vous pouvez appliquer la stylisation de deux manières. La première consiste à passer un ContentCardListStyling
et un ContentCardStyling
à un ContentCardsList()
, comme dans l’exemple suivant :
1
2
3
4
5
6
7
8
9
10
11
12
13
ContentCardsList(
style = ContentCardListStyling(listBackgroundColor = Color.Red),
cardStyle = ContentCardStyling(
titleTextStyle = TextStyle(
fontFamily = fontFamily,
fontSize = 25.sp
),
shadowRadius = 10.dp,
shortNewsContentCardStyle = BrazeShortNewsContentCardStyling(
shadowRadius = 15.dp
)
)
)
La seconde consiste à utiliser BrazeStyle pour créer un style global pour les composants de Braze, comme dans l’exemple suivant :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
BrazeStyle(
contentCardStyle = ContentCardStyling(
textAnnouncementContentCardStyle = BrazeTextAnnouncementContentCardStyling(
cardBackgroundColor = Color.Red,
descriptionTextStyle = TextStyle(
fontFamily = fontFamily,
fontSize = 25.sp,
)
),
titleTextColor = Color.Magenta
)
) {
// Your app here, including any ContentCardsList() in it
}
Le contrôleur de vue des cartes de contenu vous permet de personnaliser l’apparence et le comportement de toutes les cellules via la structure BrazeContentCardUI.ViewController.Attributes
. La configuration des cartes de contenu à l’aide des Attributes
est une option facile, qui vous permet de lancer votre interface utilisateur de cartes de contenu avec une configuration minimale.
La personnalisation via Attributes
n’est possible qu’en Swift.
Modifier Attributes.default
Personnalisez l’aspect et la convivialité de toutes les instances du contrôleur de vue de l’interface utilisateur des cartes de contenu de Braze en modifiant directement la variable statique Attributes.defaults
.
Par exemple, pour modifier la taille de l’image et le rayon d’angle par défaut pour toutes les cellules :
1
2
BrazeContentCardUI.ViewController.Attributes.defaults.cellAttributes.cornerRadius = 20
BrazeContentCardUI.ViewController.Attributes.defaults.cellAttributes.classicImageSize = CGSize(width: 65, height: 65)
Initialisation du contrôleur de vue avec des attributs
Si vous souhaitez modifier uniquement une instance spécifique du contrôleur de vue de l’interface utilisateur de la carte contenu de Braze, utilisez l’initialisateur init(braze:attributes:)
pour transmettre une structure Attributes
personnalisée au contrôleur de vue.
Par exemple, vous pouvez modifier la taille de l’image et le rayon des coins pour une instance spécifique du contrôleur de vue :
1
2
3
4
5
var attributes = BrazeContentCardUI.ViewController.Attributes.defaults
attributes.cellAttributes.cornerRadius = 20
attributes.cellAttributes.classicImageSize = CGSize(width: 65, height: 65)
let viewController = BrazeContentCardUI.ViewController(braze: AppDelegate.braze, attributes: attributes)
Personnalisation des cellules par sous-classement
Vous pouvez également créer des interfaces personnalisées en enregistrant des classes personnalisées pour chaque type de carte souhaité. Pour utiliser votre sous-classe au lieu de la cellule par défaut, modifiez la propriété cells
dans la structure Attributes
. Par exemple :
1
2
3
4
5
var attributes = BrazeContentCardUI.ViewController.Attributes.defaults
// Register your own custom cell
attributes.cells[BrazeContentCardUI.ClassicImageCell.identifier] = CustomClassicImageCell.self
let viewController = BrazeContentCardUI.ViewController(braze: AppDelegate.braze, attributes: attributes)
Modifier les cartes de contenu par programmation
Les cartes de contenu peuvent être modifiées par programme en assignant la fermeture transform
à votre structure Attributes
. L’exemple ci-dessous modifie les adresses title
et description
des cartes compatibles :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
var attributes = BrazeContentCardUI.ViewController.Attributes.defaults
attributes.transform = { cards in
cards.map { card in
var card = card
if let title = card.title {
card.title = "[modified] \(title)"
}
if let description = card.description {
card.description = "[modified] \(description)"
}
return card
}
}
let viewController = BrazeContentCardUI.ViewController(braze: AppDelegate.braze, attributes: attributes)
Consultez l’exemple d’application Exemples pour un exemple complet.
La personnalisation des cartes de contenu via Attributes
n’est pas prise en charge avec Objective-C.
Les styles par défaut de Braze sont définis en CSS dans le SDK de Braze. En écrasant des styles sélectionnés dans votre application, il est possible de personnaliser notre fil standard avec vos propres images de fond, des familles de polices, des styles, des tailles, des animations, et bien plus encore. Par exemple, voici un exemple d’override qui fera apparaître les cartes de contenu en 800 px de large :
1
2
3
body .ab-feed {
width: 800px;
}
Recettes personnalisées
Voici quelques recettes pour des cas d’utilisation courants de la personnalisation.
Police personnalisée
Personnaliser la police utilisée dans vos cartes de contenu vous permet de préserver l’identité de votre marque et de créer une expérience visuellement attrayante pour vos utilisateurs. Utilisez ces recettes pour définir par programme la police de toutes les cartes de contenu.
Pour modifier la police par défaut de manière programmatique, définissez un style pour les cartes et utilisez l’attribut fontFamily
pour demander à Braze d’utiliser votre famille de polices personnalisée.
Par exemple, pour mettre à jour la police sur tous les titres des cartes image sous-titrées, remplacez le style Braze.ContentCards.CaptionedImage.Title
et référencez votre famille de polices personnalisée. La valeur d’attribut doit pointer vers une famille de polices dans votre répertoire res/font
.
Voici un exemple tronqué avec une famille de polices personnalisées my_custom_font_family
, référencé sur la dernière ligne :
1
2
3
4
5
6
<style name="Braze.ContentCards.CaptionedImage.Title">
<item name="android:layout_width">wrap_content</item>
...
<item name="android:fontFamily">@font/my_custom_font_family</item>
<item name="fontFamily">@font/my_custom_font_family</item>
</style>
Pour plus d’informations sur la personnalisation des polices dans le SDK Android, consultez le guide des familles de polices.
Pour modifier la police par défaut par programmation, vous pouvez définir le titleTextStyle
de ContentCardStyling
.
Vous pouvez également définir titleTextStyle
pour un type de carte spécifique en le définissant sur BrazeShortNewsContentCardStyling
et en le transmettant au shortNewsContentCardStyle
de ContentCardStyling
.
1
2
3
4
5
6
7
8
9
val fontFamily = FontFamily(
Font(R.font.sailec_bold)
)
ContentCardStyling(
titleTextStyle = TextStyle(
fontFamily = fontFamily
)
)
Personnalisez vos polices en personnalisant les Attributes
de la propriété d’instance cellAttributes
. Par exemple :
1
2
3
4
5
6
var attributes = BrazeContentCardUI.ViewController.Attributes.defaults
attributes.cellAttributes.titleFont = .preferredFont(textStyle: .callout, weight: .bold)
attributes.cellAttributes.descriptionFont = .preferredFont(textStyle: .footnote, weight: .regular)
attributes.cellAttributes.domainFont = .preferredFont(textStyle: .footnote, weight: .medium)
let viewController = BrazeContentCardUI.ViewController.init(braze: braze, attributes: attributes)
La personnalisation des polices via Attributes
n’est pas prise en charge en Objective-C.
Consultez l’exemple d’application Examples pour savoir comment créer votre propre interface utilisateur avec des polices personnalisées.
Comme tout autre élément Web, vous pouvez facilement personnaliser l’apparence des cartes de contenu à l’aide de CSS. Dans votre fichier CSS ou dans les styles d’insertion CSS, utilisez la propriété font-family
et spécifiez le nom de la police ou la pile de polices souhaitée.
1
2
3
4
/* CSS selector targeting the Content Card element */
.card-element {
font-family: "Helvetica Neue", Arial, sans-serif;
}
Icônes épinglées personnalisées
Lors de la création d’une carte de contenu, les marketeurs ont la possibilité d’épingler la carte. Une carte épinglée s’affiche en haut d’un flux d’un utilisateur et ne peut pas être rejetée par l’utilisateur. Lorsque vous personnalisez vos styles de cartes, vous avez la possibilité de modifier l’aspect de l’icône épinglée.
Pour définir une icône épinglée personnalisée, remplacez le style Braze.ContentCards.PinnedIcon
. Votre actif d’image personnalisé doit être déclaré dans l’élément android:src
. Par exemple :
1
2
3
4
5
6
7
8
9
10
<style name="Braze.ContentCards.PinnedIcon">
<item name="android:src">@drawable/{my_custom_image_here}</item>
<item name="android:layout_width">wrap_content</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:layout_alignParentRight">true</item>
<item name="android:layout_alignParentTop">true</item>
<item name="android:contentDescription">@null</item>
<item name="android:importantForAccessibility">no</item>
</style>
Pour modifier l’icône épinglée par défaut, vous pouvez définir le pinnedResourceId
de ContentCardStyling
. Par exemple :
1
2
3
4
ContentCardStyling(
pinnedResourceId = R.drawable.pushpin,
pinnedImageAlignment = Alignment.TopCenter
)
Vous pouvez également spécifier un Composable dans pinnedComposable
de ContentCardStyling
. Si pinnedComposable
est spécifié, il remplace la valeur de pinnedResourceId
.
1
2
3
4
5
6
7
8
9
10
11
12
ContentCardStyling(
pinnedComposable = {
Box(Modifier.fillMaxWidth()) {
Text(
modifier = Modifier
.align(Alignment.Center)
.width(50.dp),
text = "This message is not read. Please read it."
)
}
}
)
Personnalisez l’icône de l’épingle en modifiant les propriétés pinIndicatorColor
et pinIndicatorImage
de la propriété d’instance cellAttributes
instance. Par exemple :
1
2
3
4
5
var attributes = BrazeContentCardUI.ViewController.Attributes.defaults
attributes.cellAttributes.pinIndicatorColor = .red
attributes.cellAttributes.pinIndicatorImage = UIImage(named: "my-image")
let viewController = BrazeContentCardUI.ViewController.init(braze: braze, attributes: attributes)
Vous pouvez également utiliser la sous-classe pour créer votre propre version personnalisée de BrazeContentCardUI.Cell
, qui inclut l’indicateur d’épingle. Par exemple :
1
2
3
4
var attributes = BrazeContentCardUI.ViewController.Attributes.defaults
attributes.cells[BrazeContentCardUI.ClassicImageCell.identifier] = CustomClassicImageCell.self
let viewController = BrazeContentCardUI.ViewController(braze: AppDelegate.braze, attributes: attributes)
La personnalisation de l’indicateur de broche via Attributes
n’est pas prise en charge en Objective-C.
La structure de l’icône épinglée de la carte de contenu est la suivante :
1
2
3
<div class="ab-pinned-indicator">
<i class="fa fa-star"></i>
</div>
Si vous souhaitez utiliser une autre icône FontAwesome, il vous suffit de remplacer le nom de classe de l’élément i
par le nom de classe de l’icône souhaitée.
Si vous souhaitez remplacer complètement l’icône, supprimez l’élément i
et ajoutez l’icône personnalisée en tant qu’enfant de ab-pinned-indicator
. Il y a plusieurs façons de procéder, mais une méthode simple consiste à replaceChildren()
sur l’élément ab-pinned-indicator
.
Par exemple :
1
2
3
4
5
6
7
8
9
// Get the parent element
const pinnedIndicator = document.querySelector('.ab-pinned-indicator');
// Create a new custom icon element
const customIcon = document.createElement('span');
customIcon.classList.add('customIcon');
// Replace the existing icon with the custom icon
pinnedIndicator.replaceChildren(customIcon);
Modification de la couleur de l’indicateur messages non lus
Les cartes de contenu contiennent une ligne bleue au bas de la carte qui indique si la carte a été consultée ou non.
Modifiez la couleur de la barre de l’indicateur messages non lus en modifiant la valeur de com_braze_content_cards_unread_bar_color
dans votre fichier colors.xml
:
1
2
3
4
5
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- The color used to highlight unread Content Cards at their bottom edge -->
<color name="com_braze_content_cards_unread_bar_color">#1676d0</color>
</resources>
Pour changer la couleur de la barre de l’indicateur messages non lus, modifiez la valeur de unreadIndicatorColor
dans ContentCardStyling
:
1
2
3
ContentCardStyling(
unreadIndicatorColor = Color.Red
)
Modifiez la couleur de la barre de l’indicateur messages non lus en attribuant une valeur à la couleur de teinte de votre instance BrazeContentCardUI.ViewController
:
1
2
let viewController = BrazeContentCardUI.ViewController(braze: AppDelegate.braze)
viewController.view.tintColor = .systemGreen
Cependant, si vous souhaitez modifier uniquement l’indicateur non visualisé, vous pouvez accéder à la propriété unviewedIndicatorColor
de votre structure BrazeContentCardUI.ViewController.Attributes
. Si vous utilisez les implémentations UITableViewCell
de Braze, vous devez accéder à la propriété avant que la cellule ne soit dessinée.
Par exemple, pour définir la couleur de l’indicateur non visionné en rouge :
1
2
3
4
var attributes = BrazeContentCardUI.ViewController.Attributes.defaults
attributes.cellAttributes.unviewedIndicatorColor = .red
let viewController = BrazeContentCardUI.ViewController(braze: AppDelegate.braze, attributes: attributes)
Consultez l’exemple d’application Exemples pour un exemple complet.
Modifiez la couleur de la barre de l’indicateur messages non lus en attribuant une valeur à la couleur de teinte de votre BRZContentCardUIViewController
:
1
2
BRZContentCardUIViewController *viewController = [[BRZContentCardUIViewController alloc] initWithBraze:AppDelegate.braze];
[viewController.view setTintColor:[UIColor systemGreenColor]];
La personnalisation de l’indicateur non affiché uniquement via Attributes
n’est pas prise en charge en Objective-C.
Pour modifier la couleur de l’indicateur de messages non lus d’une carte, ajoutez un CSS personnalisé à votre page Web. Par exemple, pour définir la couleur de l’indicateur non visualisé en vert :
1
.ab-unread-indicator { background-color: green; }
Désactivation de l’indicateur messages non lus
Masquez la barre de l’indicateur messages non lus en paramétrant setUnreadBarVisible
sur ContentCardViewHolder
à false
.
La désactivation de l’indicateur de messages non lus n’est pas prise en charge dans Jetpack Compose.
Masquez la barre d’indicateurs non lus en définissant la propriété attributes.cellAttributes.unviewedIndicatorColor
de votre structure Attributes
sur .clear
.
La personnalisation de l’indicateur non affiché uniquement via Attributes
n’est pas prise en charge en Objective-C.
Masquez la barre d’indicateurs non lus en ajoutant le style suivant à votre site css
:
1
.ab-unread-indicator { display: none; }