半路独行

菜鸟的Xamarin.Forms前行之路——原生Toast的简单实现方法

 项目中信息提示框,貌似只有个DisplayAlert,信息提示太过于单一,且在有些场合Toast更加实用,以下是一个简单的原生Toast的实现方法

项目地址:https://github.com/weiweu/TestProject/tree/dev/Toast

共享项目

定义一个接口IToast,包括Short和Long两个方法:

    public interface IToast
    {
        void LongAlert(string message);
        void ShortAlert(string message);
    }

安卓

在安卓平台实现接口的方法并注入,添加一个Toast_Android.cs文件:

[assembly: Dependency(typeof(Toast_Android))]
namespace Sample.Droid
{
    public class Toast_Android : IToast
    {
        public void LongAlert(string message)
        {
            Toast.MakeText(Android.App.Application.Context, message, ToastLength.Long).Show();
        }
        public void ShortAlert(string message)
        {
            Toast.MakeText(Android.App.Application.Context, message, ToastLength.Short).Show();
        }
    }
}

 

Ios

在Ios平台实现接口的方法并注入,添加一个Toast_Ios.cs文件:

[assembly: Xamarin.Forms.Dependency(typeof(Toast_Ios))]
namespace Sample.iOS
{
    public class Toast_Ios : IToast
    {
        const double LONG_DELAY = 3.5;
        const double SHORT_DELAY = 2.0;

        NSTimer alertDelay;
        UIAlertController alert;

        public void LongAlert(string message)
        {
            ShowAlert(message, LONG_DELAY);
        }
        public void ShortAlert(string message)
        {
            ShowAlert(message, SHORT_DELAY);
        }

        void ShowAlert(string message, double seconds)
        {
            alertDelay = NSTimer.CreateScheduledTimer(seconds, (obj) =>
            {
                dismissMessage();
            });
            alert = UIAlertController.Create(null, message, UIAlertControllerStyle.Alert);
            UIApplication.SharedApplication.KeyWindow.RootViewController.PresentViewController(alert, true, null);
        }

        void dismissMessage()
        {
            if (alert != null)
            {
                alert.DismissViewController(true, null);
            }
            if (alertDelay != null)
            {
                alertDelay.Dispose();
            }
        }
    }
}

 

使用方法

例如在2个按钮的点击事件中实现Toast

xaml:

  <Button Text="Short Toast" Clicked="Short_Clicked"/>
            
  <Button Text="Long Toast" Clicked="Long_Clicked"/>

cs:

  void Short_Clicked(object sender, EventArgs e)
  {
        DependencyService.Get<IToast>().ShortAlert("Short Toast");
  }
  void Long_Clicked(object sender, EventArgs e)
  {
        DependencyService.Get<IToast>().LongAlert("Long Toast");
  }
posted @ 2017-08-27 16:28  半路独行  阅读(3875)  评论(0编辑  收藏  举报