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

Posted 半路独行

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了菜鸟的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平台实现接口的方法并注入,添加一个MessageIOSRenderer.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");
  }

以上是关于菜鸟的Xamarin.Forms前行之路——原生Toast的简单实现方法的主要内容,如果未能解决你的问题,请参考以下文章

菜鸟的Xamarin.Forms前行之路——绪言

菜鸟的Xamarin.Forms前行之路——实现按钮的字体图标(可扩展)

菜鸟的Xamarin.Forms前行之路——各种报错问题解决方法合集(不定时更新)

菜鸟的Xamarin.Forms前行之路——按钮的按下抬起事件的监控(可扩展至其他事件)

Xamarin.Forms 3.1.0+版本 Android 原生支持底部导航栏

Xamarin.Forms 3.1.0+版本 Android 原生支持底部导航栏啦