这次给大家介绍两个比较好用的提示插件,如成功、等待、错误提示。

准备:

  1、新建一个Prism Xamarin.Forms项目;

  2、右击解决方案,添加NuGet包:

    1)Acr.UserDialogs(全部安装);

    2)AndHUD(安卓项目安装),BTProgressHUD(iOS项目安装);

设计:

  1、我们先介绍第一种Acr.UserDialogs,这个提示插件其实是基于AndHUD和BTProgressHUD,就是说Acr.UserDialogs就是通过实现DependencyService,来封装调用这两个控件的,使用非常简单,而且在PCL中任意位置随意调用,使用前,需先在Android项目的MainActivity中注册(iOS不需要),如果在MainActivity中引用不成功,或不能智能提示的,请重新打开VS即可,如图:

  注册完成后,我们就可以使用了。

  编写代码:

    1)在MainPage中,添加一个测试按钮,并绑定TestCommand操作

  1. <StackLayout HorizontalOptions="Center" VerticalOptions="Center">
  2. <Button Text="测试" x:Name="testBtn" Command="{Binding TestCommand}"></Button>
  3. </StackLayout>

    2)在MainPageViewModel中,添加一个TestCommand属性,里面调用了几个常用的提示,其他的大家可以动手尝试。

  1. private DelegateCommand _testCommand;
  2.  
  3. public DelegateCommand TestCommand
  4. {
  5. get
  6. {
  7. if (_testCommand == null)
  8. {
  9. _testCommand = new DelegateCommand(async () =>
  10. {
  11. UserDialogs.Instance.ShowLoading("请稍候");
  12.  
  13. await Task.Delay();
  14.  
  15. UserDialogs.Instance.HideLoading();
  16.  
  17. UserDialogs.Instance.ShowSuccess("成功");
  18.  
  19. await Task.Delay();
  20.  
  21. UserDialogs.Instance.Toast("hello");
  22.  
  23. });
  24. }
  25.  
  26. return _testCommand;
  27. }
  28. }

  2、第二种,由于AndHUD只支持安卓,而BTProgressHUD支持iOS(由于BTProgressHUD和Acr.UserDialogs同时使用了BigTed命名空间,会冲突,因此请先把iOS项目下的Acr.UserDialogs卸载)因此需要利用DependencyService来注册控件,方可使用:

    1)在PCL下,创建一个IHUDProvider接口,代码如下:

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6.  
  7. namespace AlertDemo
  8. {
  9. public interface IHUDProvider
  10. {
  11. void ShowToast(string message=null);
  12.  
  13. void ShowSuccess(string message = null);
  14.  
  15. void ShowLoading(string message = null);
  16.  
  17. void Dismiss();
  18.  
  19. }
  20. }

    2)在Android目录下,创建一个HUDProvider类,实现IHUDProvider接口,代码如下:

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5.  
  6. using Android.App;
  7. using Android.Content;
  8. using Android.OS;
  9. using Android.Runtime;
  10. using Android.Views;
  11. using Android.Widget;
  12. using Xamarin.Forms;
  13.  
  14. [assembly: Dependency(typeof(AlertDemo.Droid.HUDProvider))]
  15. namespace AlertDemo.Droid
  16. {
  17. public class HUDProvider : IHUDProvider
  18. {
  19. public void Dismiss()
  20. {
  21. AndroidHUD.AndHUD.Shared.Dismiss(Forms.Context);
  22. }
  23.  
  24. public void ShowLoading(string message = null)
  25. {
  26. AndroidHUD.AndHUD.Shared.Show(Forms.Context, message);
  27. }
  28.  
  29. public void ShowSuccess(string message = null)
  30. {
  31. AndroidHUD.AndHUD.Shared.ShowSuccess(Forms.Context, message, AndroidHUD.MaskType.Black, TimeSpan.FromSeconds());
  32. }
  33.  
  34. public void ShowToast(string message = null)
  35. {
  36. AndroidHUD.AndHUD.Shared.ShowToast(Forms.Context,message,AndroidHUD.MaskType.Black,new TimeSpan(,,));
  37. }
  38. }
  39. }

    3)在iOS项目下,创建一个HUDProvider类,实现IHUDProvider接口,代码如下:

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4. using Xamarin.Forms;
  5.  
  6. [assembly: Dependency(typeof(AlertDemo.iOS.HUDProvider))]
  7. namespace AlertDemo.iOS
  8. {
  9. public class HUDProvider : IHUDProvider
  10. {
  11. public void Dismiss()
  12. {
  13. BigTed.BTProgressHUD.Dismiss();
  14. }
  15.  
  16. public void ShowLoading(string message = null)
  17. {
  18. BigTed.BTProgressHUD.Show(message);
  19. }
  20.  
  21. public void ShowSuccess(string message = null)
  22. {
  23. BigTed.BTProgressHUD.ShowSuccessWithStatus(message);
  24. }
  25.  
  26. public void ShowToast(string message = null)
  27. {
  28. BigTed.BTProgressHUD.ShowToast(message,BigTed.ProgressHUD.ToastPosition.Center);
  29. }
  30. }
  31. }

    4)回到MainPage中,添加一个新的测试按钮,并绑定TestCommand2命令

  1. <StackLayout HorizontalOptions="Center" VerticalOptions="Center">
  2. <Button Text="测试" x:Name="testBtn" Command="{Binding TestCommand}"></Button>
  3.  
  4. <Button Text="测试2" x:Name="testBtn2" Command="{Binding TestCommand2}"></Button>
  5. </StackLayout>

    5)在MainPageViewModel下,添加TestCommand2命令

  1. private DelegateCommand _testCommand2;
  2.  
  3. public DelegateCommand TestCommand2
  4. {
  5. get {
  6. if (_testCommand2 == null)
  7. {
  8. _testCommand2 = new DelegateCommand(async () =>
  9. {
  10. var service = DependencyService.Get<IHUDProvider>();
  11. service.ShowLoading("请稍候");
  12.  
  13. await Task.Delay(2000);
  14.  
  15. service.Dismiss();
  16.  
  17. service.ShowSuccess("成功");
  18.  
  19. await Task.Delay(2000);
  20.  
  21. service.ShowToast("hello");
  22.  
  23. });
  24. }
  25. return _testCommand2; }
  26. }

    6)生成并运行安卓AVD模拟器

可以看出,除了样式不相同以外,基本提示一致,因此实际开发项目中,我们可能推荐Acr.UserDialogs控件,但是我们也可以体验一下如何利用DependencyService.Get<>来实现安卓和iOS的自定义控件

Xamarin.Forms+Prism(3)—— 简单提示UI的使用的更多相关文章

  1. Xamarin.Forms+Prism(1)—— 开发准备

    本次随笔连载,主要用于记录本人在项目中,用Xamarin.Forms开发APP中所使用的第三方技术或一些技巧. 准备: 1.VS2017(推荐)或VS2015: 2.JDK 1.8以上: 3.Xama ...

  2. LINKs: Xamarin.Forms + Prism

    LINK 1 - How to use Prism with Xamarin.Forms http://brianlagunas.com/first-look-at-the-prism-for-xam ...

  3. Xamarin.Forms 学习系列之优秀UI收集

    1.各种优秀UI例子 https://github.com/jsuarezruiz/xamarin-forms-goodlooking-UI 输入框例子 https://github.com/enis ...

  4. Xamarin.Forms+Prism(2)—— 基本使用 NavigationService 相对路径和绝对路径

    本文主要对Prism框架下的导航服务NavigationService进行一次介绍和使用. 1.打开VS,可以看到左侧的已安装模版里面有: 2.创建完成后,从PCL项目中,看到App.xaml.cs中 ...

  5. Xamarin.Forms + Prism,整理页面导航跳转流程

    3个Page,Page1 -> Page2 -> Page3 -> Page2 -> Page1. PageViewModel实现接口:INavigatingAware, IN ...

  6. Xamarin.Forms第三方XAML预览工具-LiveXAML简单体验

    截至目前,Xamarin官方的Xaml Previewer工具仍然处于测试阶段,使用中也发现了各种不便,例如各种莫名其妙的渲染失败,或者提示需要编译项目才能渲染等等,复杂项目基本不可用, 完全没有体现 ...

  7. Xamarin.Forms 开发资源集合(复制)

    复制:https://www.cnblogs.com/mschen/p/10199997.html 收集整理了下 Xamarin.Forms 的学习参考资料,分享给大家,稍后会不断补充: UI样式 S ...

  8. Xamarin.Forms 开发资源集合

    收集整理了下 Xamarin.Forms 的学习参考资料,分享给大家,稍后会不断补充: UI样式 Snppts: Xamarin Forms UI Snippets. Prebuilt Templat ...

  9. C#使用Xamarin开发可移植移动应用(1.入门与Xamarin.Forms页面),附源码

    前言 什么是Xamarin? Xamarin始创于2011年,旨在使移动开发变得难以置信地迅捷和简单. Xamarin的产品简化了针对多种平台的应用开发,包括iOS.Android.Windows P ...

随机推荐

  1. [LeetCode] Dp

    Best Time to Buy and Sell Stock 题目: Say you have an array for which the ith element is the price of ...

  2. KoaHub.js -- 基于 Koa.js 平台的 Node.js web 快速开发框架之koahub

    Installation $ npm install koahub Use with koa   var app = require('koa')();   var router = require( ...

  3. ubuntu 笔记

    Ubuntu学习之路还很长,做个笔记也不亏 terminal tab 补全忽略大小写: 在 /ect/inputrc文件中添加或修改 'set completion-ignore-case on' U ...

  4. 来谈一谈------JavaScript对象

    1.window常用的属性: ①history ②location 2.history对象的方法: ①back() ②forward() ③go() 3.location对象的属性: ①host() ...

  5. Android权限解释

    属性 说明 android.permission.ACCESS_CHECKIN_PROPERTIES 允许读写访问 "properties"表在checkin数据库中,改值可以修改 ...

  6. windows修改Host后未生效。

    打开CMD命令,输入ipconfig /flushdns即可

  7. Java EE基础之JSP(三)

         原来准备简单点,用一篇文章介绍完JSP的,没想到细节很多.这是第三篇也是最后一篇,这三篇文章介绍了基本的JSP知识,很多名词概念和用法,一定要在实践项目中使用之后才会有更加亲切的体会.第三篇 ...

  8. 一步到位Linux中安装配置MySQL及补坑

    Windows上安装MySQL也就不讲了,基本上一路点击下一步就可完成,现在讲讲Linux上布署Mysql,虽然也有很多网友列出了详细的步骤,可能是因为版本过老的问题导致即使按照上面一步步来也还是出现 ...

  9. [麻雀虽小]记 简易Markdown阅读器 开发全过程

    [麻雀虽小]记 简易Markdown阅读器 开发全过程 [TOC] 序言 项目地址: https://github.com/didikee/MDReader 测试文章地址: 2017 Android ...

  10. Java内存泄露实例