maui通过custom handler或platformview机制安全集成原生视图。custom handler是官方推荐方式,需为自定义控件编写各平台handler并注册;platformview适用于轻量场景,但需手动处理布局、事件和生命周期。

MAUI 本身不直接支持“原生嵌入”(即像 Android 的 Fragment 或 iOS 的 UIViewController 那样把原生视图直接塞进 MAUI 页面),但它提供了可控、安全、跨平台兼容的原生视图集成方式——核心是通过自定义 Handler(渲染器)或PlatformView机制,将原生控件桥接到 MAUI 的可视化树中。
用 Custom Handler 嵌入原生 View(推荐方式)
这是 MAUI 官方推荐、稳定且可维护的嵌入路径。本质是为一个自定义 MAUI 控件(如 MyNativeView)编写各平台专属的 Handler,在其中创建并托管原生视图。
- 在共享项目中定义空控件:
public class MyNativeView : View { } - 在
Platforms/Android中注册 Handler:
创建MyNativeViewHandler.cs,继承ViewHandler<mynativeview android.views.view></mynativeview>,重写CreatePlatformView,返回你实例化的TextView、SurfaceView或任意原生View - 在
Platforms/iOS中同理:
Handler 继承ViewHandler<mynativeview uikit.uiview></mynativeview>,CreatePlatformView返回UILabel、WKWebView等原生UIView子类 - 注册 Handler(在
MauiProgram.cs):builder.ConfigureMauiHandlers(handlers => handlers.AddHandler<mynativeview mynativeviewhandler>());</mynativeview>
用 PlatformView 直接托管(轻量级场景)
适用于简单复用已有原生组件,无需封装完整控件逻辑。MAUI 提供了 PlatformView 基类(位于 Microsoft.Maui.Controls.Handlers.Compatibility,需引用兼容包)。
- Android:继承
PlatformView,在构造函数中 new 出原生View并赋值给NativeView - iOS:同样继承
PlatformView,设置NativeView为你的UIView实例 - XAML 中使用:
<myplatformview></myplatformview>(需绑定命名空间) - 注意:此方式不参与 MAUI 布局系统深度管理,尺寸/事件需手动同步
关键注意事项
嵌入不是“贴图”,而是真正融入 MAUI 渲染生命周期,所以必须处理好:
-
布局适配:原生 View 的宽高需响应 MAUI 的约束(重写
Measure或监听SizeChanged) -
事件桥接:点击、滑动等原生事件要通过委托或
Command暴露给 MAUI 层 -
内存与生命周期:确保
Dispose时释放原生资源(如SurfaceHolder、AVCaptureSession) -
iOS 注意点:所有 UI 操作必须在主线程(
MainThread.BeginInvokeOnMainThread),否则崩溃 -
Android 注意点:避免在
CreatePlatformView中直接访问Context,应通过Platform.CurrentActivity安全获取
基本上就这些。不需要改 MainActivity 或 AppDelegate,也不用写桥接 JS,MAUI 的 Handler 机制已经把原生嵌入做得足够干净。









