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

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='&#xF08e;',
                                       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,就把注册代码改成:
    fonts.AddFont("WINGDNG3.TTF", "Wingdings 3");
    
    同时XAML里的FontFamily也改成"Wingdings 3"。
  • 替换Glyph编码方式:把XAML里的&#xF08e;换成直接的Unicode字符(用字符映射表工具找到对应字符复制粘贴),或者用十六进制转义写法Glyph="\uF08e",避免Android版本对HTML实体编码的支持差异。
  • 用Label替代Button的ImageSource:如果上述方法都无效,换成Label显示箭头,给Label加点击手势绑定命令:
    <Label Grid.Row="5"
           Grid.Column="2"
           FontFamily="WingDing"
           Text="&#xF08e;"
           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_

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 18:15:09