Personalizando estilos de cartão de conteúdo
Os Cartões de Conteúdo da Braze vêm com uma aparência padrão. Este artigo cobre opções de estilo para seus Cartões de Conteúdo para ajudá-lo a corresponder à identidade da sua marca. Para uma visão geral básica dos tipos de opções de personalização que você tem com os Cartões de Conteúdo, veja Visão geral da personalização.
Personalizando a formatação
A interface padrão dos Cartões de Conteúdo é importada da camada de interface do SDK da Braze. A partir daí, você pode ajustar certas partes do estilo do cartão, a ordem em que os cartões são exibidos e como o feed é mostrado aos seus usuários.
Propriedades do cartão de conteúdo, como title
, cardDescription
, imageUrl
, etc., são editáveis diretamente por meio do dashboard, que é o método preferido para alterar esses detalhes.
Por padrão, os Cartões de Conteúdo do SDK do Android e do FireOS correspondem às diretrizes padrão da interface do usuário do Android para proporcionar uma experiência perfeita. Você pode ver esses estilos padrão no arquivo res/values/styles.xml
na distribuição do SDK 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>
Para personalizar o estilo do seu cartão de conteúdo, substitua este estilo padrão. Para substituir um estilo, copie-o na sua totalidade para o arquivo styles.xml
no seu projeto e faça modificações. Todo o estilo deve ser copiado para o seu arquivo styles.xml
local para que todos os atributos sejam configurados corretamente.
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>
Por padrão, os Cartões de Conteúdo do SDK do Android e do FireOS correspondem às diretrizes padrão da interface do usuário do Android para proporcionar uma experiência perfeita.
Você pode aplicar estilo de duas maneiras. O primeiro é passar um ContentCardListStyling
e ContentCardStyling
para ContentCardsList()
, como no exemplo a seguir:
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
)
)
)
O segundo é usar BrazeStyle para criar um estilo global para os componentes Braze, como no exemplo a seguir:
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
}
O controlador de visualização de Cartões de Conteúdo permite que você personalize a aparência e o comportamento de todas as células através da BrazeContentCardUI.ViewController.Attributes
estrutura. Configurar cartões de conteúdo usando Attributes
é uma opção fácil, permitindo que você lance sua interface de cartões de conteúdo com configuração mínima.
A personalização via Attributes
está disponível apenas em SWIFT.
Modificando Attributes.default
Personalize a aparência e a sensação de todas as instâncias do controlador de visualização da interface do usuário do cartão de conteúdo da Braze modificando diretamente a variável estática Attributes.defaults
.
Por exemplo, para alterar o tamanho padrão da imagem e o raio do canto para todas as células:
1
2
BrazeContentCardUI.ViewController.Attributes.defaults.cellAttributes.cornerRadius = 20
BrazeContentCardUI.ViewController.Attributes.defaults.cellAttributes.classicImageSize = CGSize(width: 65, height: 65)
Inicializando o controlador de visualização com Atributos
Se você deseja modificar apenas uma instância específica do controlador de visualização da interface do cartão de conteúdo da Braze, use o init(braze:attributes:)
inicializador para passar uma Attributes
struct personalizada para o controlador de visualização.
Por exemplo, você pode alterar o tamanho da imagem e o raio do canto para uma instância específica do controlador de visualização:
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)
Personalizando células por subclasse
Como alternativa, você pode criar interfaces personalizadas registrando classes personalizadas para cada tipo de cartão desejado. Para usar sua subclasse em vez da célula padrão, modifique a propriedade cells
na estrutura Attributes
. Por exemplo:
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)
Modificando cartões de conteúdo programaticamente
Os cartões de conteúdo podem ser alterados programaticamente atribuindo o fechamento transform
na sua estrutura Attributes
. O exemplo abaixo modifica o title
e o description
de cartões compatíveis:
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)
Confira o app de exemplo Exemplos para um exemplo completo.
Personalizar cartões de conteúdo por meio de Attributes
não é compatível com Objective-C.
Os estilos padrão do Braze são definidos em CSS dentro do SDK do Braze. Substituindo estilos selecionados em seu aplicativo, é possível personalizar nosso feed padrão com suas próprias imagens de fundo, famílias de fontes, estilos, tamanhos, animações e muito mais. O seguinte é um exemplo de substituição que fará com que os cartões de conteúdo apareçam com 800 px de largura:
1
2
3
body .ab-feed {
width: 800px;
}
Receitas de personalização
Aqui estão algumas receitas para casos de uso comuns de personalização.
Fonte personalizada
Personalizar a fonte usada em seus Cartões de Conteúdo permite que você mantenha sua identidade de marca e crie uma experiência visualmente atraente para seus usuários. Use estas receitas para definir a fonte de todos os Cartões de Conteúdo programaticamente.
Ícones fixados personalizados
Ao criar um cartão de conteúdo, os profissionais de marketing têm a opção de fixar o cartão. Um cartão fixado será exibido no topo do feed do usuário e não poderá ser descartado pelo usuário. À medida que você personaliza os estilos do seu cartão, você tem a capacidade de alterar a aparência do ícone fixado.
Para definir um ícone fixado personalizado, substitua o estilo Braze.ContentCards.PinnedIcon
. Seu ativo de imagem personalizado deve ser declarado no elemento android:src
. Por exemplo:
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>
Para alterar o ícone fixado padrão, você pode definir o pinnedResourceId
do ContentCardStyling
. Por exemplo:
1
2
3
4
ContentCardStyling(
pinnedResourceId = R.drawable.pushpin,
pinnedImageAlignment = Alignment.TopCenter
)
Você também pode especificar um Composable em pinnedComposable
de ContentCardStyling
. Se pinnedComposable
for especificado, ele substituirá o valor 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."
)
}
}
)
Personalize o ícone do alfinete modificando as propriedades pinIndicatorColor
e pinIndicatorImage
da propriedade de instância cellAttributes
. Por exemplo:
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)
Você também pode usar a subclasse para criar sua própria versão personalizada de BrazeContentCardUI.Cell
, que inclui o indicador de pino. Por exemplo:
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)
A personalização do indicador de pin via Attributes
não é compatível com Objective-C.
A estrutura do ícone fixado do cartão de conteúdo é:
1
2
3
<div class="ab-pinned-indicator">
<i class="fa fa-star"></i>
</div>
Se você quiser usar um ícone diferente do FontAwesome, basta substituir o nome da classe do elemento i
pelo nome da classe do ícone desejado.
Se você quiser trocar o ícone completamente, remova o elemento i
e adicione o ícone personalizado como um filho de ab-pinned-indicator
. Existem algumas formas diferentes de fazer isso, mas um método simples seria replaceChildren()
no elemento ab-pinned-indicator
.
Por exemplo:
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);
Alterando a cor do indicador de não lido
Os Cartões de Conteúdo contêm uma linha azul na parte inferior do cartão que indica se o cartão foi visualizado ou não.
Altere a cor da barra indicadora de não lida alterando o valor em com_braze_content_cards_unread_bar_color
no seu arquivo 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>
Para alterar a cor da barra indicadora de não lida, modifique o valor de unreadIndicatorColor
em ContentCardStyling
:
1
2
3
ContentCardStyling(
unreadIndicatorColor = Color.Red
)
Altere a cor da barra indicadora de não lidos atribuindo um valor à cor de tonalidade da sua BrazeContentCardUI.ViewController
instância:
1
2
let viewController = BrazeContentCardUI.ViewController(braze: AppDelegate.braze)
viewController.view.tintColor = .systemGreen
No entanto, se você deseja modificar apenas o indicador não visualizado, pode acessar a propriedade unviewedIndicatorColor
da sua estrutura BrazeContentCardUI.ViewController.Attributes
. Se você usar implementações da Braze UITableViewCell
, deve acessar a propriedade antes que a célula seja desenhada.
Por exemplo, para definir a cor do indicador não visualizado para vermelho:
1
2
3
4
var attributes = BrazeContentCardUI.ViewController.Attributes.defaults
attributes.cellAttributes.unviewedIndicatorColor = .red
let viewController = BrazeContentCardUI.ViewController(braze: AppDelegate.braze, attributes: attributes)
Confira o app de exemplo Exemplos para um exemplo completo.
Altere a cor da barra indicadora de não lida atribuindo um valor à cor de tonalidade do seu BRZContentCardUIViewController
:
1
2
BRZContentCardUIViewController *viewController = [[BRZContentCardUIViewController alloc] initWithBraze:AppDelegate.braze];
[viewController.view setTintColor:[UIColor systemGreenColor]];
A personalização apenas do indicador não visualizado via Attributes
não é compatível com Objective-C.
Para alterar a cor do indicador de não lido de um cartão, adicione CSS personalizado à sua página da web. Por exemplo, para definir a cor do indicador não visualizado para verde:
1
.ab-unread-indicator { background-color: green; }
Desativando indicador de não lido
Oculte a barra de indicador não lido configurando setUnreadBarVisible
em ContentCardViewHolder
para false
.
Desativar o indicador de não lido não é suportado no Jetpack Compose.
Oculte a barra de indicador não lido definindo a propriedade attributes.cellAttributes.unviewedIndicatorColor
em sua estrutura Attributes
para .clear
.
A personalização apenas do indicador não visualizado via Attributes
não é compatível com Objective-C.
Oculte a barra indicadora de não lida adicionando o seguinte estilo ao seu css
:
1
.ab-unread-indicator { display: none; }