Es gibt eine einfache Lösung. Durch die DependencyService können Sie ganz einfach den Toast-Like Ansatz in Android und iOS bekommen.
eine Schnittstelle in Ihrem gemeinsamen Paket erstellen.
public interface IMessage
{
void LongAlert(string message);
void ShortAlert(string message);
}
Android Abschnitt
[assembly: Xamarin.Forms.Dependency(typeof(MessageAndroid))]
namespace Your.Namespace
{
public class MessageAndroid : IMessage
{
public void LongAlert(string message)
{
Toast.MakeText(Application.Context, message, ToastLength.Long).Show();
}
public void ShortAlert(string message)
{
Toast.MakeText(Application.Context, message, ToastLength.Short).Show();
}
}
}
iOS Abschnitt
In iOs gibt es keine native Lösung wie Toast, so müssen wir unsere eigenen Ansatz implementieren.
[assembly: Xamarin.Forms.Dependency(typeof(MessageIOS))]
namespace Bahwan.iOS
{
public class MessageIOS : IMessage
{
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();
}
}
}
}
Bitte beachten Sie, dass in jeder Plattform, müssen wir unsere Klassen mit DependencyService registrieren.
Jetzt können Sie Toast Service in überall in unserem Projekt zugreifen aus.
DependencyService.Get<IMessage>().ShortAlert(string message);
DependencyService.Get<IMessage>().LongAlert(string message);
Vielen Dank für die Links. Ich habe das NuGet-Paket in mein Xamarin Forms-Projekt im Xamarin Studio eingefügt. Allerdings, wenn ich versuche, es zu benutzen - durch Aufruf von DependencyService.Get(); - es gibt immer null zurück. Haben Sie das wirklich in Xamarin ausgeführt und/oder haben Sie eine Idee, was ich tun muss? Ich habe buchstäblich nur das Paket hinzugefügt und dann die beiden hinzugefügt Zeilen in der Dokumentation, um es auszuprobieren - die erste Zeile ist die DependencyService Get. –
Jimmy
Vergessen zu erwähnen, es sagt auch, um DependencyService.Register() zu tun - aber ToastNotificatorImplementation kann nicht gelöst werden.Auch nicht sicher, was zu tun, dachte ich, es wäre alles im selben Namespace - Plugin.Toasts –
Jimmy
@Jimmy Wie sieht dieser Code von Ihnen aus? –