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

准备:

  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操作

  <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(); UserDialogs.Instance.HideLoading(); UserDialogs.Instance.ShowSuccess("成功"); await Task.Delay(); UserDialogs.Instance.Toast("hello"); });
} return _testCommand;
}
}

  2、第二种,由于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());
} public void ShowToast(string message = null)
{
AndroidHUD.AndHUD.Shared.ShowToast(Forms.Context,message,AndroidHUD.MaskType.Black,new TimeSpan(,,));
}
}
}

    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的自定义控件

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. 读书笔记 effective c++ Item 31 把文件之间的编译依赖降到最低

    1. 牵一发而动全身 现在开始进入你的C++程序,你对你的类实现做了一个很小的改动.注意,不是接口,只是实现:一个私有的stuff.然后你需要rebuild你的程序,计算着这个build应该几秒钟就足 ...

  2. How to set up Tensorflow inception-v3 model on Windows

    There is Inception-v3 model python implementation on GitHub at: https://github.com/tensorflow/models ...

  3. python 机器学习 决策树

    决策树(Decision Trees ,DTs)是一种无监督的学习方法,用于分类和回归. 优点:计算复杂度不高,输出结果易于理解,对中间值缺失不敏感,可以处理不相关的特征数据缺点:可能会产生过度匹配的 ...

  4. 不可重入定时器Newlife.TimerX

    在.net常用的定时器类有下面三种,使用定时器时需要设定参数,如间断时间.定时器计溢出后的回调函数.延时.开始等,定时器的的主要方法有开始.终止等,不同的定时器实现上述的方法会有一些差异,本文会针对具 ...

  5. CUDA随机数生成库curand——deviceAPI

    原创作品,如要转载请注明出处:http://www.cnblogs.com/shrimp-can/p/6590152.html 最近要在device函数中使用curand库生成随机数,查找了下资料,除 ...

  6. css 层叠式样式表

    内联样式:样式优先级最高的 <div style="width:100px;height:100px;"></div> style=“” 用冒号和分号 wi ...

  7. JavaScript 方法调用模式和函数调用模式

    这两天在读<JavaScript语言精粹>关于第4章函数调用的几种模式琢磨了半天. 这里就说一下方法调用模式跟函数调用模式. 方法调用模式: 当一个函数被保存为对象的一个属性时,我们称它为 ...

  8. git pull错误记录及解决

    执行操作:$ git pull 返回错误: error: RPC failed; result=7, HTTP code = 0 fatal: The remote and hung up unexp ...

  9. ZooKeeper集群-搭建指南

    第一步: 上传安装程序到Linux 这一步很简单就不在这过多说明了! 第二步: 在Linux上使用命令行安装 第三步: 修改配置文件 1.修改zoo.cfg文件 2.修改集群中各台主机的名称 1).如 ...

  10. 一个关于Linux升级Python后yum的小问题

    前几天在自己的阿里云服务器安装好Python3.5.2之后,顺便删除了原有的/usr/bin/python(因为我知道系统自带的是Python2,而且也会有/usr/bin/python2这个文件,所 ...