Avalonia android 项目中调用 maui

如果仅需要调用 android 底层的一些功能,可以只使用 MauiEssentials
引用包 dotnet add package Microsoft.Maui.Essentials
启用 <UseMauiEssentials>true</UseMauiEssentials>
文档 https://learn.microsoft.com/zh-cn/dotnet/maui/platform-integration/?view=net-maui-10.0
可以参见 oidc 登录流程文档,其中使用了 MauiEssentials 中的 WebAuthenticatorCallbackActivityWebAuthenticatorhttps://blog.xsoft.ltd/2026/01/18/android-avalonia-oidc-%e7%99%bb%e5%bd%95/

如果需要全套 maui (含 UIMauiEssentials) 功能, 可以使用 AvaloniaMauiHybrid
https://github.com/AvaloniaUI/AvaloniaMauiHybrid

准备工作

  • 调整 dotnetsdk 为 8.0, 最新的 10.0 会有引用包兼容性问题

  • 注意

    注意引用的相关包要兼容 .net 8 , 不要使用太新的版本, 比如 Microsoft.Maui.Essentials8.*, 不要使用 10.*

  • 引用包 nuget add package Avalonia.Maui

  • 启用 <UseMaui>true</UseMaui>

  • 需要一个 maui application

    创建一个 Microsoft.Maui.Controls.Application 子类, 比如 public class MauiApplication : Application {}

  • 启用 maui application

    appBuilder.UseMaui<MauiApplication>(this);

  • 设置主题

    需要为 maui 准备一个主题,不然会报错, avalonia 在 /Resources/values/styles.xml 中设置了默认主题 MyTheme, 将其设置父类为 Theme.MaterialComponents.*, 比如

   <style name="MyTheme" parent="Theme.MaterialComponents.DayNight">
    </style>

    <style name="MyTheme.NoActionBar" parent="Theme.MaterialComponents.DayNight.NoActionBar">
        <item name="android:windowActionBar">false</item>
        <item name="android:windowNoTitle">true</item>

        <item name="android:windowBackground">@drawable/splash_screen</item>

        <item name="colorPrimary">#2196F3</item>
        <item name="colorSecondary">#FF4081</item>
    </style>
  • 调用代码

    要需要使用 muai 控件的地方添加 MauiControlHost, 其中放置 maui 控件, 比如

    xmlns:mauiHost="clr-namespace:Avalonia.Maui.Controls;assembly=Avalonia.Maui"
    xmlns:mauiCtrls="clr-namespace:Microsoft.Maui.Controls;assembly=Microsoft.Maui.Controls"
    <mauiHost:MauiControlHost Width="100" Height="100">
            <mauiCtrls:Grid>
                <mauiCtrls:Button Text="MAUI Button" Command="{Binding LoginCommand}" />
            </mauiCtrls:Grid>
        </mauiHost:MauiControlHost>

除非有现在的 maui 代码需要直接复用,不然主题兼容与控件混用就直接会导致很多问题,

上一篇
下一篇