xamarin.forms跳转android native并传参

xamarin开发过程中,能写在pcl的尽量写在pcl,提高复用率,但有时候因为一些已知的原因,不得不去使用native,xamarin官方github上有提供这部分源码Forms2Native供参考,这里以实际开发过程中实现xamarin android截图控件为例。

一、pcl中:SourcePage为调用方,CropPage.cs为目标页;

public SourcePage()
{
    InitializeComponent();
    var command = new Command(async () =>
    {
	//获取gallery中照片
        var mediaPicker = DependencyService.Get<IMediaPicker>();
        var result = await mediaPicker.SelectPhotoAsync(new CameraMediaStorageOptions { DefaultCamera = CameraDevice.Front, MaxPixelDimension = 400 });
	//创建CropPage并传入照片路径
        var desPage = new CropPage(result.Path);
	//跳转
	App.Current.MainPage = desPage;
	//跳转后会出现两个页面,实际上CropPage还是生成了,在点击左下方的返回按钮时回到的是CropPage而不是SourcePagae,
	//我这里是将原调用页重新指定回去,不知道其他人是怎么处理的,欢迎告知。
	App.Current.MainPage = new SourcePage();
    }); 
    btnSelectPhoto.Command = command; 
}

 
 

 
 

二、CropPage.cs

public class CropPage : ContentPage
{
    //欲传往native的参数,写成公共属性供native中Renderers的OnCreate方法调用,这里为图片路径
    public string FilePath { get; set; }
    public CropPage()
    {
        
    }

    public CropPage(string filePath):this()
    {
        FilePath = filePath;
    }
}

三、xamarin android中,特定Renderer绑定CropPage和Renderer本身,这里为CropPageRenderer

//该特性实现CropPage和CropPageRenderer的绑定
[assembly:ExportRenderer(typeof(AppPortable.CropPage), typeof(App.Droid.Renderers.CropPageRenderer))]

namespace App.Droid.Renderers
{
    public class CropPageRenderer : PageRenderer
    {
        protected override void OnElementChanged(ElementChangedEventArgs<Page> e)
        {
            base.OnElementChanged(e);
            var filePath = "";
            if (e.NewElement != null)
            {
		//这边获取CropPage所传递的参数
                filePath = (e.NewElement as CropPage).FilePath;
            }
	    //开始运行指定的Activity,这里是CropActivity
            var activity = this.Context as Activity;
            var cropActivity = new Intent(activity, typeof(CropActivity));
            activity.StartActivity(cropActivity);
        }
    }
}

四、xamarin android中的CropActivity.cs

namespace App.Droid
{
    [Activity(Label = "CropActivity")]
    public class CropActivity : Activity
    {
        protected override void OnCreate(Bundle savedInstanceState)
        {
            base.OnCreate(savedInstanceState);
	    //这边就完成了,至于layout目录下的axml目标axml
            SetContentView(Resource.Layout.CropImage);
        }
    }
}

 




  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值