Xamarin形式:Android中的Toast通知& IOS

时间:2017-02-07 06:02:46

标签: xamarin xamarin.ios xamarin.android toast

您好我正在使用PCL项目创建一个xamarin表单的应用程序。我想在两次背压时实现Toast通知仅适用于android和ios。对于android我试过 -

long doublePressInterval_ms = 300;
DateTime lastPressTime = DateTime.MinValue;
DateTime pressTime = DateTime.Now;

        if ((pressTime - lastPressTime).TotalMilliseconds <= doublePressInterval_ms)
        {
            if(Device.OS == TargetPlatform.Android)
            {

                Java.Lang.JavaSystem.Exit(0);
            }
        }
        else
        {

           Android.Widget.Toast.MakeText(this, string_name, ToastLength.Long).Show();
        }
        lastPressTime = pressTime;
        return false;

但它显示错误无法将页面转换为Android上下文。如何在我的pcl项目中获得adnroid上下文?

我尝试了Toast Notification Plugin for Xamarin,但它说.Net版本不兼容。

enter image description here

5 个答案:

答案 0 :(得分:2)

在Xamarin Android中,您可以像往常一样显示

Toast.MakeText(this,"toast message", ToastLength.Long).Show();

在Xamarin iOS中,您必须使用自定义设计的UIView和动画来实现相同的效果

public void ShowToast(String message, UIView view)
{
    UIView residualView = view.ViewWithTag(1989);
    if (residualView != null)
        residualView.RemoveFromSuperview();

    var viewBack = new UIView(new CoreGraphics.CGRect(83, 0, 300, 100));
    viewBack.BackgroundColor = UIColor.Black;
    viewBack.Tag = 1989;
    UILabel lblMsg = new UILabel(new CoreGraphics.CGRect(0, 20, 300, 60));
    lblMsg.Lines = 2;
    lblMsg.Text = message;
    lblMsg.TextColor = UIColor.White;
    lblMsg.TextAlignment = UITextAlignment.Center;
    viewBack.Center = view.Center;
    viewBack.AddSubview(lblMsg);
    view.AddSubview(viewBack);
    roundtheCorner(viewBack);
    UIView.BeginAnimations("Toast");
    UIView.SetAnimationDuration(3.0f);
    viewBack.Alpha = 0.0f;
    UIView.CommitAnimations();
}

答案 1 :(得分:0)

您可以参考Toast Notifications for Xamarin Forms,这里是sample code

基本上它使用DependencyService在每个平台上实现ToastNotification,而每个平台都有自己的实现来烘烤通知。

您可以按照指南完成工作,我遇到的唯一问题是安装此Toasts.Forms.Plugin。在PCL上安装此软件包时可能会遇到此异常:

  

无法安装包'Toasts.Forms.Plugin 3.1.2'。您正在尝试将此软件包安装到以“.NETPortable,Version = v4.5,Profile = Profile259”为目标的项目中,但该软件包不包含任何与该框架兼容的程序集引用或内容文件。

要解决此问题,您可以右键单击PCL和“卸载项目”,然后再次右键单击PCL并选择“编辑NAMESPACE.proj”,将代码<TargetFrameworkProfile>Profile259</TargetFrameworkProfile>替换为<TargetFrameworkProfile>Profile111</TargetFrameworkProfile>,保存此文件并重新加载此项目。更改此TargetFrameworkProfile后,此插件可以成功安装在PCL上。

答案 2 :(得分:0)

我在Xamarin.Forms(Portable)项目中创建了Toast Notification的文档。但是,我没有时间处理iPhone应用程序(坦率地说我不能在iPhone上检查事件,因为我没有Mac;)),但你可以将它用于Android应用程序。

它使用Inbuilt功能,您无需为此下载任何外部插件。

链接:https://docs.google.com/document/d/1C9mrsxvww3RIrm_BrtDWfKZrp6cAvZVqevewznIUHwI/edit?usp=sharing

示例代码:https://github.com/imchandresh/ToastMessage/tree/master

谢谢。

答案 3 :(得分:0)

我使用了以下内容。演示找到Here

using Foundation;
using UIKit;`
using Xamarin.Forms;
using XamStart.Interfaces;
using XamStart.iOS.DependencyServices;
using XamStart.Models;

[assembly: Dependency(typeof(ToastService))]
namespace XamStart.iOS.DependencyServices
{
    public class ToastService : IToastService
    {
        // Code stolen from here:  http://sezeromer.com/xamarin-forms-ios-toast-mesaj/ 
        const double LONG_DELAY = 3.5;
        const double SHORT_DELAY = 2.0;

        NSTimer alertDelay;
        UIAlertController alert;
        public void CookIt(string message, MyToastLength length)
        {
            var toastLength = (length == MyToastLength.Long) ? LONG_DELAY : SHORT_DELAY;
            alertDelay = NSTimer.CreateRepeatingScheduledTimer(toastLength, (obj) =>
            {
                MesajReddet();
            });
            alert = UIAlertController.Create(null, message, UIAlertControllerStyle.Alert);

            UIApplication.SharedApplication.KeyWindow.RootViewController.PresentViewController(alert, true, null);
        }

        void MesajReddet()
        {
            if (alert != null)
            {
                alert.DismissViewController(true, null);

            }
            if (alertDelay != null)
            {
                alertDelay.Dispose();
            }
        }
    }
}

答案 4 :(得分:0)

mask_generator