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

.NET MAUI类库中如何将SVG文件用作通知图标?

解决MAUI子项目通知图标无法引用的问题
  • 确认子项目SDK类型:如果是类库项目,需将项目文件顶部的SDK替换为MAUI SDK:

    <Project Sdk="Microsoft.NET.Sdk.Maui">
    

    普通.NET类库不支持MAUI/Android资源自动生成逻辑。

  • 按Android规范准备通知图标:Android通知小图标要求为透明背景的单色图,SVG无法直接作为mipmap资源被SetSmallIcon识别,需将SVG导出为不同分辨率的PNG文件,按如下目录结构放置在子项目中:

    Resources/
    ├─ mipmap-mdpi/
    │  └─ appicon2.png
    ├─ mipmap-hdpi/
    │  └─ appicon2.png
    ├─ mipmap-xhdpi/
    │  └─ appicon2.png
    └─ mipmap-xxhdpi/
       └─ appicon2.png
    
  • 配置Android资源编译规则:在子项目的.csproj文件中添加以下ItemGroup,确保PNG被识别为Android资源:

    <ItemGroup>
      <AndroidResource Include="Resources\mipmap-*\*.png" />
    </ItemGroup>
    
  • 开启资源设计器自动生成:在项目文件的PropertyGroup中添加配置,确保生成Resource.designer.cs文件:

    <PropertyGroup>
      <AndroidGenerateResourceDesigner>True</AndroidGenerateResourceDesigner>
      <AndroidResourceDesignerNamespace>你的子项目命名空间.Resource</AndroidResourceDesignerNamespace>
    </PropertyGroup>
    

    配置完成后,清理项目并重新生成,此时代码中就能通过Resource.mipmap.appicon2引用图标。

  • 代码引用修正:导入子项目的Resource命名空间,调整通知构建代码:

    using 你的子项目命名空间.Resource;
    
    var notificationBuilder = new NotificationCompat.Builder(this, MyActivity.Channel_ID)
        .SetContentTitle(title)   
        .SetSmallIcon(Resource.mipmap.appicon2)
        .SetContentText(messageBody)
        .SetChannelId(MyActivity.Channel_ID)
        .SetContentIntent(pendingIntent)
        .SetAutoCancel(true)
        .SetPriority((int)NotificationPriority.Max);
    
  • 移除无关配置:之前添加的MauiIcon配置是用于生成应用启动图标,和通知小图标无关,可直接删除该配置块,避免资源编译冲突。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 05:07:09