老生常谈,使用接口方式注入方式实现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`