菜鸟的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");
}