MAUI项目中Android13下Wingding 3字体图标不显示的解决方法
问题:MAUI按钮使用Wingding 3字体箭头在Android 13不显示,Android 8正常
我在MAUI项目的按钮上用Wingding 3字体绘制箭头,已经把字体添加到资源里,也在MauiProgram.cs完成了注册,但这个图标在Android 13上显示不出来,Android 8却能正常展示,该怎么解决?
相关代码
MauiProgram.cs
var builder = MauiApp.CreateBuilder(); builder .UseMauiApp<App>() .UseMauiMTAdmob() .ConfigureFonts(fonts => { fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular"); fonts.AddFont("OpenSans-Semibold.ttf", "OpenSansSemibold"); fonts.AddFont("WINGDNG3.TTF", "WingDing"); });
XAML代码
<Button Grid.Row="5" Grid.Column="2" BackgroundColor="Transparent" BorderColor="Transparent" Command="{Binding NextbuttonactionCommand}" HorizontalOptions="Center" VerticalOptions="Center" ImageSource="{FontImageSource FontFamily='WingDing', Glyph='', Color={Binding ScreenColor, Converter={StaticResource colorInverter}}}"> <VisualStateManager.VisualStateGroups> <VisualStateGroupList> <VisualStateGroup Name="CommonStates"> <VisualState Name="Normal"> <VisualState.Setters> <Setter Property="Button.BackgroundColor" Value="Transparent" /> </VisualState.Setters> </VisualState> <VisualState Name="Pressed"> <VisualState.Setters> <Setter Property="Button.BackgroundColor" Value="Transparent" /> </VisualState.Setters> </VisualState> </VisualStateGroup> </VisualStateGroupList> </VisualStateManager.VisualStateGroups> </Button>
解决方法
- 检查字体文件属性:右键
WINGDNG3.TTF文件→属性,确保「生成操作」设为MauiFont,「复制到输出目录」设为如果较新则复制,避免字体文件未正确打包到Android应用中。 - 修正字体族名称匹配:Android 13对字体名称匹配更严格,用字体查看工具(比如Windows字体查看器)打开
WINGDNG3.TTF,查看它的真实内部字体名称,替换注册代码里的别名。比如真实名称是Wingdings 3,就把注册代码改成:
同时XAML里的fonts.AddFont("WINGDNG3.TTF", "Wingdings 3");FontFamily也改成"Wingdings 3"。 - 替换Glyph编码方式:把XAML里的
换成直接的Unicode字符(用字符映射表工具找到对应字符复制粘贴),或者用十六进制转义写法Glyph="\uF08e",避免Android版本对HTML实体编码的支持差异。 - 用Label替代Button的ImageSource:如果上述方法都无效,换成Label显示箭头,给Label加点击手势绑定命令:
<Label Grid.Row="5" Grid.Column="2" FontFamily="WingDing" Text="" TextColor="{Binding ScreenColor, Converter={StaticResource colorInverter}}" HorizontalOptions="Center" VerticalOptions="Center"> <Label.GestureRecognizers> <TapGestureRecognizer Command="{Binding NextbuttonactionCommand}" /> </Label.GestureRecognizers> <VisualStateManager.VisualStateGroups> <VisualStateGroupList> <VisualStateGroup Name="CommonStates"> <VisualState Name="Normal" /> <VisualState Name="Pressed"> <VisualState.Setters> <Setter Property="Opacity" Value="0.7" /> </VisualState.Setters> </VisualState> </VisualStateGroup> </VisualStateGroupList> </VisualStateManager.VisualStateGroups> </Label> - 清除Android缓存:卸载应用后重新安装,或者清除应用的缓存和数据,解决Android 13可能存在的字体缓存问题。
内容的提问来源于stack exchange,提问作者ZI_
相关产品推荐
相关产品推荐

