老生常谈,使用接口方式注入方式实现3个平台的跨平台弹窗。首先在Xamarin共享项目/PCL中添加一个接口。
public interface IMessageAlert { Task Alert(string Title,string Message); Task Cancel(); Task OK(); }三个方法分别是弹窗提示,点击取消后处理事件,点击Ok后处理事件,然后在App.CS中定义一个App内全局静态属性,如下:
public static IMessageAlert MyAlert { get; set; }
然后在各自平台中实现弹窗的方法。首先安卓如下:
class MessageAlert : IMessageAlert { public Context Context { get; set; } public MessageAlert(Context c) { Context = c; } async public Task Alert(string Title, string Message) { if (Title=="") { Toast.MakeText(Context, Message, ToastLength.Long).Show(); } else { AlertDialog.Builder builder = new AlertDialog.Builder(Context); AlertDialog alertDialog = builder.Create(); alertDialog.SetTitle(Title); //alertDialog.SetIcon(Resource.Drawable.Icon); alertDialog.SetMessage(Message); alertDialog.SetButton("OK", (sender, args) =>OK() ); alertDialog.SetButton2("Cancel", (sender, args) =>Cancel() ); alertDialog.Show(); } } async public Task Cancel() { //throw new NotImplementedException(); } async public Task OK() { //throw new NotImplementedException(); } }在一个类中实现Xamarin共享/PCL中的接口,并具体实现,在安卓MainActivity.cs的OnCreate方法中完成注入如下:
App.MyAlert = new MessageAlert(this);//设置提示方法这样,在共享项目中调用Alert接口中的方法即可实现弹窗提示。同理对于UWP程序,实现如下:
public class MessageAlert : IMessageAlert { async public Task Alert(string Title, string Message) { var dialog = new MessageDialog(Message, Title); dialog.Commands.Add(new UICommand("确定", uiCommand => OK())); dialog.Commands.Add(new UICommand("取消", uiCommand => Cancel())); await dialog.ShowAsync(); } async public Task Cancel() { //do some thing when canceled } async public Task OK() { // } }类似的注入过程,在MainPage.Cs中的构造中实现:
App.MyAlert = new MessageAlert();
综上所述,在共享项目/PCL中弹窗方法固定,在分平台各自实现并运行时注入,实现了跨平台弹窗的统一调用。
`END`