You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AlertDialog自定义字体仅标题和按钮生效,如何让消息文本也应用该字体?

解决AlertDialog消息文本不应用自定义字体的问题

你的问题出在AppCompat AlertDialog的默认样式结构里:消息文本使用的textAppearanceAlertDialogMessage样式并没有自动继承主题的android:fontFamily属性,而标题和按钮对应的文本样式则默认继承了主题设置。要让消息文本也用上自定义字体,有两种简洁的解决方式:

方法一:通过主题扩展消息文本样式

这种方法最符合Android的主题规范,不需要修改代码逻辑:

  1. 先定义一个针对消息文本的文本样式,继承默认的AlertDialog消息文本样式并替换字体:
<style name="CustomAlertDialogMessageText" parent="@style/TextAppearance.AppCompat.AlertDialog.Message">
    <item name="android:fontFamily">@font/myfont</item>
    <!-- 如需调整消息文本的其他属性(如颜色、大小),可在此添加 -->
</style>
  1. 在你现有的CustomAlertDialog主题里,添加对这个消息文本样式的引用:
<style name="CustomAlertDialog" parent="Theme.AppCompat.Light.Dialog.Alert">
    <item name="android:fontFamily">@font/myfont</item>
    <item name="android:textColor">@color/black</item>
    <!-- 新增该行,指定消息文本的样式 -->
    <item name="textAppearanceAlertDialogMessage">@style/CustomAlertDialogMessageText</item>
</style>

方法二:代码中手动设置消息文本字体(备选方案)

如果你需要更灵活的控制,也可以在构建AlertDialog时,直接获取消息文本的TextView并设置字体:

val alertDialog = AlertDialog.Builder(context, R.style.CustomAlertDialog)
    .setTitle("标题")
    .setMessage("消息文本")
    .setPositiveButton("确定", null)
    .create()

alertDialog.setOnShowListener {
    // 获取消息文本的TextView
    val messageTextView = alertDialog.findViewById<TextView>(android.R.id.message)
    messageTextView?.typeface = ResourcesCompat.getFont(context, R.font.myfont)
}

alertDialog.show()

推荐使用第一种方法,它能保持样式与代码分离,更易维护。

内容的提问来源于stack exchange,提问作者Eir

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 03:22:09