此次给你们介绍两个比较好用的提示插件,如成功、等待、错误提示。async
准备:ide
一、新建一个Prism Xamarin.Forms项目;测试
二、右击解决方案,添加NuGet包:spa
1)Acr.UserDialogs(所有安装);插件
2)AndHUD(安卓项目安装),BTProgressHUD(iOS项目安装);设计
设计:3d
一、咱们先介绍第一种Acr.UserDialogs,这个提示插件实际上是基于AndHUD和BTProgressHUD,就是说Acr.UserDialogs就是经过实现DependencyService,来封装调用这两个控件的,使用很是简单,并且在PCL中任意位置随意调用,使用前,需先在Android项目的MainActivity中注册(iOS不须要),若是在MainActivity中引用不成功,或不能智能提示的,请从新打开VS便可,如图:code
注册完成后,咱们就可使用了。orm
编写代码:blog
1)在MainPage中,添加一个测试按钮,并绑定TestCommand操做
<StackLayout HorizontalOptions="Center" VerticalOptions="Center"> <Button Text="测试" x:Name="testBtn" Command="{Binding TestCommand}"></Button> </StackLayout>
2)在MainPageViewModel中,添加一个TestCommand属性,里面调用了几个经常使用的提示,其余的你们能够动手尝试。
private DelegateCommand _testCommand; public DelegateCommand TestCommand { get { if (_testCommand == null) { _testCommand = new DelegateCommand(async () => { UserDialogs.Instance.ShowLoading("请稍候"); await Task.Delay(2000); UserDialogs.Instance.HideLoading(); UserDialogs.Instance.ShowSuccess("成功"); await Task.Delay(2000); UserDialogs.Instance.Toast("hello"); }); } return _testCommand; } }
二、第二种,因为AndHUD只支持安卓,而BTProgressHUD支持iOS(因为BTProgressHUD和Acr.UserDialogs同时使用了BigTed命名空间,会冲突,所以请先把iOS项目下的Acr.UserDialogs卸载)所以须要利用DependencyService来注册控件,方可以使用:
1)在PCL下,建立一个IHUDProvider接口,代码以下:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace AlertDemo { public interface IHUDProvider { void ShowToast(string message=null); void ShowSuccess(string message = null); void ShowLoading(string message = null); void Dismiss(); } }
2)在Android目录下,建立一个HUDProvider类,实现IHUDProvider接口,代码以下:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using Android.App; using Android.Content; using Android.OS; using Android.Runtime; using Android.Views; using Android.Widget; using Xamarin.Forms; [assembly: Dependency(typeof(AlertDemo.Droid.HUDProvider))] namespace AlertDemo.Droid { public class HUDProvider : IHUDProvider { public void Dismiss() { AndroidHUD.AndHUD.Shared.Dismiss(Forms.Context); } public void ShowLoading(string message = null) { AndroidHUD.AndHUD.Shared.Show(Forms.Context, message); } public void ShowSuccess(string message = null) { AndroidHUD.AndHUD.Shared.ShowSuccess(Forms.Context, message, AndroidHUD.MaskType.Black, TimeSpan.FromSeconds(1)); } public void ShowToast(string message = null) { AndroidHUD.AndHUD.Shared.ShowToast(Forms.Context,message,AndroidHUD.MaskType.Black,new TimeSpan(0,0,2)); } } }
3)在iOS项目下,建立一个HUDProvider类,实现IHUDProvider接口,代码以下:
using System; using System.Collections.Generic; using System.Text; using Xamarin.Forms; [assembly: Dependency(typeof(AlertDemo.iOS.HUDProvider))] namespace AlertDemo.iOS { public class HUDProvider : IHUDProvider { public void Dismiss() { BigTed.BTProgressHUD.Dismiss(); } public void ShowLoading(string message = null) { BigTed.BTProgressHUD.Show(message); } public void ShowSuccess(string message = null) { BigTed.BTProgressHUD.ShowSuccessWithStatus(message); } public void ShowToast(string message = null) { BigTed.BTProgressHUD.ShowToast(message,BigTed.ProgressHUD.ToastPosition.Center); } } }
4)回到MainPage中,添加一个新的测试按钮,并绑定TestCommand2命令
<StackLayout HorizontalOptions="Center" VerticalOptions="Center"> <Button Text="测试" x:Name="testBtn" Command="{Binding TestCommand}"></Button> <Button Text="测试2" x:Name="testBtn2" Command="{Binding TestCommand2}"></Button> </StackLayout>
5)在MainPageViewModel下,添加TestCommand2命令
private DelegateCommand _testCommand2; public DelegateCommand TestCommand2 { get { if (_testCommand2 == null) { _testCommand2 = new DelegateCommand(async () => { var service = DependencyService.Get<IHUDProvider>(); service.ShowLoading("请稍候"); await Task.Delay(2000); service.Dismiss(); service.ShowSuccess("成功"); await Task.Delay(2000); service.ShowToast("hello"); }); } return _testCommand2; } }
6)生成并运行安卓AVD模拟器
能够看出,除了样式不相同之外,基本提示一致,所以实际开发项目中,咱们可能推荐Acr.UserDialogs控件,可是咱们也能够体验一下如何利用DependencyService.Get<>来实现安卓和iOS的自定义控件