Android Firebase InAppMessaging 自定义字体/样式实现方案问询
Firebase In-App Messaging 自定义字体实现方案
可用实现方式
方案1:完全自定义消息展示逻辑(可控性最高)
- 直接替换官方默认的
FirebaseInAppMessagingDisplay实现,所有视图使用自行编写的XML布局,可自由调整所有样式属性包括字体 - 操作步骤:
- 调用
FirebaseInAppMessaging.getInstance().setMessageDisplayComponent(自定义实现类实例),替换默认的消息展示组件 - 重写
displayMessage方法时,自行inflate自定义XML布局,从传入的InAppMessage实例中取出标题、正文、按钮文本等内容,赋值到对应控件后,直接调用TextView的setTypeface()方法设置目标字体即可
- 调用
方案2:Hook官方现有视图修改字体(改动量最小)
- 如果你已经在使用
BindingWrapper构建视图,可在拿到官方生成的根视图实例后,递归遍历所有子控件,批量给TextView设置自定义字体,示例代码如下:
// 批量替换所有TextView的字体 fun applyCustomTypeface(rootView: View, targetTypeface: Typeface) { if (rootView is ViewGroup) { for (i in 0 until rootView.childCount) { applyCustomTypeface(rootView.getChildAt(i), targetTypeface) } } else if (rootView is TextView) { rootView.typeface = targetTypeface } }
- 调用时机:通过BindingWrapper获取到根视图后,传入根视图和提前加载好的Typeface实例即可完成替换
补充说明
- 官方确实未暴露直接设置style或typeface的公开接口,以上两种方案都是目前社区普遍使用的稳定实现,已在大量生产环境项目中验证可行
- 如果需要适配横幅、弹窗、全屏、卡片等所有官方消息类型,更推荐使用方案1,可针对每种消息类型编写独立的XML布局,自定义所有样式细节
内容的提问来源于stack exchange,提问作者Francisco Durdin Garcia
相关产品推荐
相关产品推荐

