菜鸟的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平台实现接口的方法并注入,添加一个MessageIOSRenderer.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");
  }
时间: 2024-08-07 16:59:59

菜鸟的Xamarin.Forms前行之路——原生Toast的简单实现方法的相关文章

菜鸟的Xamarin.Forms前行之路——绪言

作者入门时间不是很久,差不多一年,期间自学的东西比较杂乱,到目前为止,编程方面的知识比较薄弱.之所以做这个系列,也只是因为做了两个月的Xamarin.Forms方面的东西,由于资料和自身实力的原因,过程走的比较艰难,但所幸的是也解决了部分的问题,积累了一些经验.期望通过这个系列,和大家分享经验,查漏纠错. 作为一个菜鸟,在解决问题的时候,往往比较直接,就是仅仅为了解决问题,期间可能根本没有考虑性能等方面的问题.所以在这个系列中,问题肯定是作者亲身实践能够解决的,但是在性能资源等方面作者没有做过考

菜鸟的Xamarin.Forms前行之路——按钮的按下抬起事件的监控(可扩展至其他事件)

提问:监控按钮的点击事件,可以通过按钮的Click事件,或者Command绑定,那么如何监控按钮的按下与抬起,或者移动,长按,双击等事件? 解决方法:各个平台自定义渲染依赖注入. 共享项目PCL: 1先定义一个继承Button的实体类NewButton.cs public class NewButton : Button { public event EventHandler Pressed; public event EventHandler Released; public virtual

菜鸟的Xamarin.Forms前行之路——实现按钮的字体图标(可扩展)

在实际的APP中,带有图标的按钮用到地方还是蛮多的,字体图标往往能更快更生动的传达信息,并且相对于背景图片,字体图标也有着绝对的优势,所以实现按钮的字体图标是值得尝试的. 实现方法:各平台自定义渲染按钮 PCL 添加名为Fonts.cs的类,作用各平台的字体文件(ios-android-uwp,ios字体文件不要后缀并且大写,安卓全称) public static class Fonts { public static string IconFont= Device.OnPlatform("Ic

菜鸟的Xamarin.Forms前行之路——各种报错问题解决方法合集(不定时更新)

2017-08-24 1序列不包含任何元素 这个是布局方面的问题,请检查布局是否出现问题 2一个或多个项目目标不支持生成操作"EmbeddedResource" 换成管理员方式打开VS 3错误与XamalcTask或xamlFilePathAttribute有关 重新以管理员方式打开vs或者检查Xaml.Forms的Nuget包是否有更新,更新即可 [email protected](content) build action is supported 修改安卓项目的Androidma

菜鸟的Xamarin.Forms前行之路——共享组件

出自:博客园-半路独行 Url Description Xamarin.Social The Xamarin.Social component provides an abstraction for popular social networking frameworks such as Facebook and Twitter. Xamarin.Auth Xamarin.Auth provides a cross-platform implementation for client-side

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 介绍

特此声明,本篇博文转自:http://blog.csdn.net/kinfey/article/details/29621381 什么是 Xamarin Forms ? Xamarin Forms 是一个高效创建跨平台用户界面的库 .通过Xamarin Forms 可以一次编码生成基于主流移动平台(iOS, Android, Windows Phone)的应用界面.和HTML 5 不同, 它是一套原生的界面解决方案,这意味着通过Xamarin Forms 渲染的界面是与底层API 紧密相连, 那

Xamarin.Forms教程开发Xamarin.Forms应用程序需要的工具

开发Xamarin.Forms应用程序需要的工具 Xamarin.Forms教程开发Xamarin.Forms应用程序需要的工具,2014年5月8日在发布的Xamrin 3中引进了Xamarin.Forms.Xamarin.Forms是一个高效创建跨平台用户界面的库.通过Xamarin.Forms可以一次编码生成基于主流移动平台(iOS.Android.Windows Phone)的应用界面.和HTML 5不同,Xamarin.Forms是一套原生的界面解决方案,这意味着通过Xamarin.Fo

Xamarin.Forms 3.1.0+版本 Android 原生支持底部导航栏啦

Xamarin.Forms 3.1.0+版本 Android 原生支持底部导航栏啦 Xamarin.Forms 3.1.0以上版本终于支持Android底部导航栏啦,可以不用第三方的支持库了. https://developer.xamarin.com/releases/xamarin-forms/xamarin-forms-3.1/3.1.0/ C#代码: On<Android>().SetToolbarPlacement(ToolbarPlacement.Bottom); Xaml代码: