2017-02-07 4 views
1

Привет Я создаю приложение в форматах xamarin, используя проект PCL. Я хочу внедрить уведомление Toast на двухстороннем нажатии только для Android и ios. Для android я попробовал -Xamarin forms: Toast Notification in Android & IOS

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 Контекст. Как я могу получить контекст adnroid в моем проекте pcl?

Я пробовал Toast Notification Plugin for Xamarin, но он говорит .Net версия несовместима.

enter image description here

+2

Возможный дубликат [Xamarin.forms Get Android Context] (http://stackoverflow.com/questions/33674882/xamarin-forms-get-android-context) – SushiHangover

+0

@SushiHangover Я пробовал все предлагаемые в нем решения. Но никакого решения не получилось. – Sonali

+0

'Toast.MakeText (Xamarin.Forms.Forms.Context ;, string_name, ToastLength.Long).Show(); ' – SushiHangover

ответ

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 снова и выберите «Edit NAMESPACE.proj», замените код <TargetFrameworkProfile>Profile259</TargetFrameworkProfile> с <TargetFrameworkProfile>Profile111</TargetFrameworkProfile>, сохранить этот файл и перезагрузить этот проект. После изменения этого TargetFrameworkProfile этот плагин можно успешно установить на PCL.

0

Я создал документацию для уведомления о Toast в проекте Xamarin.Forms (Portable). Тем не менее, у меня не было времени для работы с iPhone-приложением (честно говоря, я не могу зарегистрировать событие на iPhone, поскольку у меня нет Mac;)), но вы можете использовать его для приложения Android.

Он использует встроенную функцию, и для этого вам не нужно загружать внешний плагин.

Ссылка: https://docs.google.com/document/d/1C9mrsxvww3RIrm_BrtDWfKZrp6cAvZVqevewznIUHwI/edit?usp=sharing

Пример кода: https://github.com/imchandresh/ToastMessage/tree/master

Спасибо.

2

В Xamarin Android вы можете показать, как обычно, как

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

В Xamarin прошивкой вы должны использовать специально созданных 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(); 
}