AlertDialog自定义字体仅标题和按钮生效,如何让消息文本也应用该字体?
解决AlertDialog消息文本不应用自定义字体的问题
你的问题出在AppCompat AlertDialog的默认样式结构里:消息文本使用的textAppearanceAlertDialogMessage样式并没有自动继承主题的android:fontFamily属性,而标题和按钮对应的文本样式则默认继承了主题设置。要让消息文本也用上自定义字体,有两种简洁的解决方式:
方法一:通过主题扩展消息文本样式
这种方法最符合Android的主题规范,不需要修改代码逻辑:
- 先定义一个针对消息文本的文本样式,继承默认的AlertDialog消息文本样式并替换字体:
<style name="CustomAlertDialogMessageText" parent="@style/TextAppearance.AppCompat.AlertDialog.Message"> <item name="android:fontFamily">@font/myfont</item> <!-- 如需调整消息文本的其他属性(如颜色、大小),可在此添加 --> </style>
- 在你现有的
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
相关产品推荐
相关产品推荐

