• 菜鸟的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平台实现接口的方法并注入,添加一个Toast_Ios.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");
      }
  • 相关阅读:
    Neo4j电影关系图Cypher
    Neo4j电影关系图
    Neo4j配置文件neo4j.conf
    SpringBoot实现多数据源(实战源码)
    Maven添加Oracle驱动及依赖
    HttpClient发送Json数据到指定接口
    java手动分页处理
    设计模式之模板方法模式
    JDBC插入性能优化对比
    Oracle数据库常用监控语句
  • 原文地址:https://www.cnblogs.com/banluduxing/p/7440664.html
Copyright © 2020-2023  润新知