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

如何在Xamarin跨平台应用中使用并跳转至各平台原生页面

实现Xamarin.Forms跨平台跳转原生页面的完整方案

核心思路

通过Xamarin自带的DependencyService依赖服务实现跨平台调用,在共享项目中定义跳转接口,Android、iOS平台分别实现对应跳转逻辑,点击按钮时判断当前运行平台触发对应方法即可。

步骤1:共享项目中实现基础逻辑

1.1 定义跳转接口

新建INativePageService.cs文件,代码如下:

public interface INativePageService
{
    // 打开Android原生页面方法
    void OpenAndroidNativePage();
    // 打开iOS原生页面方法
    void OpeniOSNativePage();
}

1.2 主页面添加按钮

主页面XAML文件添加两个按钮:

<StackLayout Padding="20">
    <Button Text="跳转至Android页面" 
            x:Name="BtnOpenAndroid" 
            Clicked="BtnOpenAndroid_OnClicked"
            Margin="0 10"/>
    <Button Text="跳转至iOS页面" 
            x:Name="BtnOpeniOS" 
            Clicked="BtnOpeniOS_OnClicked"
            Margin="0 10"/>
</StackLayout>

1.3 绑定按钮点击事件

主页面后台C#代码添加事件逻辑:

private void BtnOpenAndroid_OnClicked(object sender, EventArgs e)
{
    if(Device.RuntimePlatform == Device.Android)
    {
        DependencyService.Get<INativePageService>().OpenAndroidNativePage();
    }
    else
    {
        DisplayAlert("提示", "当前不是Android平台,无法打开Android原生页面", "确定");
    }
}

private void BtnOpeniOS_OnClicked(object sender, EventArgs e)
{
    if(Device.RuntimePlatform == Device.iOS)
    {
        DependencyService.Get<INativePageService>().OpeniOSNativePage();
    }
    else
    {
        DisplayAlert("提示", "当前不是iOS平台,无法打开iOS原生页面", "确定");
    }
}

步骤2:Android平台实现

2.1 实现依赖服务接口

在Android项目中新建NativePageServiceDroid.cs文件:

using Android.Content;
using Xamarin.Forms;
// 注册依赖服务
[assembly: Dependency(typeof(YourAppNamespace.Droid.NativePageServiceDroid))]
namespace YourAppNamespace.Droid
{
    public class NativePageServiceDroid : INativePageService
    {
        public void OpenAndroidNativePage()
        {
            // 跳转至你创建的Android原生Activity
            var context = MainActivity.Instance;
            context.StartActivity(typeof(NativeAndroidActivity));
        }

        public void OpeniOSNativePage()
        {
            // Android平台无需实现该方法
        }
    }
}

注意:YourAppNamespace替换为你自己项目的命名空间,NativeAndroidActivity是你提前在Android项目中创建的原生页面Activity

2.2 补充MainActivity配置

在Android项目的MainActivity.cs中添加静态实例变量,避免跳转时上下文为空:

public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity
{
    // 存储当前Activity实例
    public static MainActivity Instance { get; private set; }
    protected override void OnCreate(Bundle savedInstanceState)
    {
        base.OnCreate(savedInstanceState);
        Instance = this;
        // 原有初始化代码保持不变
        Xamarin.Essentials.Platform.Init(this, savedInstanceState);
        global::Xamarin.Forms.Forms.Init(this, savedInstanceState);
        LoadApplication(new App());
    }
}

步骤3:iOS平台实现

在iOS项目中新建NativePageServiceiOS.cs文件:

using UIKit;
using Xamarin.Forms;
// 注册依赖服务
[assembly: Dependency(typeof(YourAppNamespace.iOS.NativePageServiceiOS))]
namespace YourAppNamespace.iOS
{
    public class NativePageServiceiOS : INativePageService
    {
        public void OpenAndroidNativePage()
        {
            // iOS平台无需实现该方法
        }

        public void OpeniOSNativePage()
        {
            // 跳转至你创建的iOS原生ViewController
            var rootVC = UIApplication.SharedApplication.KeyWindow.RootViewController;
            var nativePage = new NativeiOSViewController();
            rootVC.PresentViewController(nativePage, true, null);
            // 如果你用了导航栈,也可以用rootVC.NavigationController.PushViewController(nativePage, true);
        }
    }
}

注意:NativeiOSViewController是你提前在iOS项目中创建的原生页面ViewController

补充说明

  • 原生页面的开发逻辑和纯原生Android、iOS开发完全一致,没有额外限制
  • 需要从原生页面返回Forms页面时,Android直接调用Activity的Finish()方法,iOS调用ViewController的DismissViewController(true, null)方法即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 04:39:04