个人资料

主页 博客 留言板 搜索
跳过导航链接首页 > 博客列表 > 博客正文

Xamarin跨平台弹窗统一调用代码

分类

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

songshizhao
最初发表2017/6/15 22:55:31 最近更新2017/6/15 22:55:31 1879
为此篇作品打分
10