.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
相关产品推荐
相关产品推荐

