Xamarin.Forms+Prism(3)—— 简单提示UI的使用

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

准备:

  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(2000);

                          UserDialogs.Instance.HideLoading();

                          UserDialogs.Instance.ShowSuccess("成功");

                          await Task.Delay(2000);

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

时间: 2024-10-20 23:49:05

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

LINKs: Xamarin.Forms + Prism

LINK 1 - How to use Prism with Xamarin.Forms http://brianlagunas.com/first-look-at-the-prism-for-xamarin-forms-preview/ (Note: the Prism.Forms version 6.0.1 doesn't support Xamarin.Forms v2 yet) LINK 2 - Prism GitHub https://github.com/PrismLibrary

Xamarin.Forms 优秀UI界面

Xamarin.Forms in Anger – Jobbberr优秀UI https://github.com/awolf/Xamarin-Forms-InAnger https://www.syntaxismyui.com/xamarin-forms-in-anger-jobbberr/

Xamarin.Forms开发APP

Xamarin.Forms+Prism(1)-- 开发准备 准备: 1.VS2017(推荐)或VS2015: 2.JDK 1.8以上: 3.Xamarin.Forms 最新版: 4.Prism 扩展,打开VS的扩展和更新,在联机中,搜索Prism,安装第一个扩展Prism Template Pack: 5.Android SDK,这个下载已经非常快了,国内已经支持Android环境下载. 6.都准备好后,请确保创建一个新的Xamarin.Forms程序后,能正常调试运行,不能调试运行的,请百度或

xamarin forms中的Button文本默认大写

问题来源 使用xamarin forms创建的android项目中,Button.Toolbar的右侧菜单按钮上的如果是字母的话,在android5.0以上,默认的文本都是大写,这种情况iOS项目不存在,是正常的显示.google公司把android的文本默认大写,这个肯定和英语国家阅读习惯有关,但是iOS却是正常显示,有点难以解释google为什么将android的按钮文本默认成大写.问题如图: 分析 其实这个问题的产生的原因还是因为 在5.0中在Button使用的Theme是这个,默认已经t

菜鸟的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 m

走进 Prism for Xamarin.Forms

一.使用环境 OS:Win 10 16273 VS:VS2017- 15.3.4 Xamarin:4.6.3.4,nuget:2.4 Android Emulator:Visual Studio for Android Emulator(相比 Android Emulator不用下载SDK,而且启动快) 二.安装 Prism 模块 工具--扩展和更新--搜索 Prism Template Pack--安装 三.开始搞起 1.先建个项目 2.添加页面 Views文件夹右键--添加--新建项,弹出来

开启Xamarin.Forms的智能感知(代码提示功能)

在使用Xamarin.Forms经常要编写xaml文件,如果是手写的话是在太蛋疼了,其实是可以开启智能感知的 1.Xamarin Studio 更新到最新版本,具体什么版本开始的不知道了,5.7以上的肯定可以,使用新技术就别用那种几年前的版本了,要勤更新,Xamarin.Forms并不是一个成熟的技术. 2.Visual Stuio 还是上面那句话,XForms对VS的要求是vs2013 update4及以上,vs2013 community和vs2015均可 以上的几个版本对XForms的xa

visual studio 2017 15.3.1中Xamarin.Forms SAP项目xaml没有智能提示的解决方法

今天看到vs上有提示了可以更新到15.3.1版本,然后马上更新了,结果悲剧了.更新以后ReSharper不能用了,好像跟vs2017有了冲突,不管是vs2017自带的智能提示功能,还是ReSharper都开始抽风,没办法,只能把ReSharper禁用了.代码的智能提示倒是恢复正常了,但是在创建Xamarin.Forms项目的时候如果选择的是共享项目 那么因为原来是使用的ReSharper才能在xaml中的智能提示,现在都不提示了.还好找到了一个解决办法来使用vs自带的智能提示,只是没有ReSha

演练:使用Xamarin.Forms开发产品介绍性质的应用(VB版)

概述 Xamarin这个使用mono和.net core的跨平台开发框架这几年在不断发展.被微软收购后的Xamarin为个人开发者提供了免费版的Xamarin for Visual Studio,吸引了更多开发人员的关注. Xamarin.Forms用起来比较方便,因为用这种方式编写一次就能到处运行.但是不知道为什么,Xamarin目前只完整支持C#.他们宣称支持的F#实际上只是比C#多了一些文档和不常用的工具上的支持,缺少Xaml后代码生成器等重要功能支持. 而VB就更受冷落了.用户建议Xam