Существует простое решение для этого. Используя DependencyService, вы можете легко получить подход Toast-Like в Android и iOS.
Создайте интерфейс в своем общем пакете.
public interface IMessage
{
void LongAlert(string message);
void ShortAlert(string message);
}
Android раздела
[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 раздел
в ИО не родное решение, как Toast, так что нам нужно реализовать свой собственный подход.
[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();
}
}
}
}
Обратите внимание, что на каждой платформе мы должны регистрировать наши классы с помощью DependencyService.
Теперь вы можете получить доступ к сервису Toast в любом месте нашего проекта.
DependencyService.Get<IMessage>().ShortAlert(string message);
DependencyService.Get<IMessage>().LongAlert(string message);
Спасибо, ребята, за ссылки. В итоге я добавил пакет NuGet в свой проект Xamarin Forms в Xamarin Studio. Однако, когда я пытаюсь его использовать - вызывая DependencyService.Get(); - он всегда возвращает значение null. Ребята, действительно, запускаете это в Xamarin и/или имеете какое-либо представление о том, что мне нужно делать? Я буквально просто добавил пакет, а затем добавил два строки в документации для его проверки - первая строка - это DependencyService Get. –
Jimmy
Забыл упомянуть, он также говорит, чтобы позвонить в DependencyService.Register() - но ToastNotificatorImplementation не может быть разрешен. Опять же, не уверен, что чтобы сделать, я думал, что все будет в том же пространстве имен - Plugin.Toasts. –
Jimmy
@Jimmy, как выглядит этот код? –