如何使用支持库26在AlertDialog中设置自定义字体

yuv*_*val 14 fonts android android-fonts android-support-library android-8.0-oreo

我正在使用Android支持库的修订版26.0.1 在我的应用程序中设置自定义字体.在我的应用主题中,我补充说:

<item name="android:fontFamily">@font/my_font</item>
Run Code Online (Sandbox Code Playgroud)

它就像一个魅力,将我整个应用程序中的文本转换为我的自定义字体.除了我的对话 - 特别是他们的标题,消息,以及他们的NumberPickers.在那些地方,字体没有更新.(单选按钮和复选框工作;是/否按钮也是如此)

有什么我忘记添加到我的主题或风格?或者支持库是否支持这个?

更多细节:我AppCompatDialogFragment用来实现我的所有对话框.在他们的onCreateDialog()方法中,我创建一个对话框AlertDialog.Builder然后返回它.

谢谢您的帮助!

yuv*_*val 5

谢谢所有回答的人,但遗憾的是这些解决方案都不适合我.我希望他们能为别人工作.

我已经得出结论,这是支持库中的一个错误,希望谷歌能够修复.与此同时,我开发了这个hacky解决方法:

public static void applyCustomFontToDialog(Context context, Dialog dialog) {
    Typeface font = ResourcesCompat.getFont(context, R.font.my_font);
    if (font != null) {
        TextView titleView = dialog.findViewById(android.support.v7.appcompat.R.id.alertTitle);
        TextView messageView = dialog.findViewById(android.R.id.message);
        if (titleView != null) titleView.setTypeface(font, Typeface.BOLD);
        if (messageView != null) messageView.setTypeface(font);
    }
}
Run Code Online (Sandbox Code Playgroud)

这通过按照支持库为其提供的ID扫描对话框的视图树以查找标题和消息视图.如果支持库要更改这些ID,这将不再有效(这就是为什么它是hacky).希望Google修复此问题,我不再需要这样做了.