Создание «тоста» - PullRequest
       8

Создание «тоста»

0 голосов
/ 07 мая 2018

Я пытался получить функциональность, аналогичную «тосту» Android, используя формы Xamarin. Посмотрев вокруг, я нашел то, что я считаю хорошим решением. Общий подход, по-видимому, заключается в создании нового макета Absolute, в котором он будет отображаться в течение определенного времени, а затем исчезнет. Хотя я думаю, что в целом понимаю, что делается, я не могу заставить его работать. Кто-нибудь может подсказать, как мне использовать этот класс, если я хочу, чтобы тост появился на моей главной странице? Должен ли я добавить AbsoluteLayout в файл XAML? Извините, я уверен, что это простой вопрос, но я не могу понять, что делать ...

Любая помощь будет принята с благодарностью!

public static class Popper
{
    public async static Task Pop (string message, AbsoluteLayout attachLayout, int showforMilliseconds = 1500)
    {
        var container = new StackLayout
        {
            HorizontalOptions = LayoutOptions.Center,
            VerticalOptions = LayoutOptions.Center,
            BackgroundColor = Color.FromHex ("#DDEFEFEF"),
            Padding = 10
        };

        var label = new Label
        {
            Text = message,
            FontAttributes = FontAttributes.Bold,
            Style = (Style)Application.Current.Resources["PopupText"]
        };

        container.Children.Add (label);

        container.Scale = 0;
        container.Opacity = 0;

        attachLayout.Children.Add (container, attachLayout.Bounds, AbsoluteLayoutFlags.PositionProportional);
        container.ScaleTo (1.0f, 100);
        container.FadeTo (1.0f, 100);

        await Task.Delay (showforMilliseconds);

        container.ScaleTo (0.0f, 250);
        await container.FadeTo (0.0f, 250);
        attachLayout.Children.Remove (container);
    }
}

1 Ответ

0 голосов
/ 07 мая 2018

На Android вам не нужно изобретать велосипед, поскольку Toast существует изначально. На других платформах нет такого понятия, как Toast, поэтому здесь нет решения с использованием «серебряной пули». Эта проблема была решена несколькими людьми несколькими способами, поэтому я оставил комментарий, что ваш вопрос может быть дубликатом существующей цепочки с несколькими примерами.

Теперь о вашей идее. Ваша реализация работает, однако она покажет Toast только на AbsoluteLayout. Зачем устанавливать такое ограничение? Если вы перепроверете ссылку, которой я поделился в комментариях, вы найдете более подходящие и элегантные решения.

Кажется, я не могу заставить его работать.

Все, что вам нужно, это AbsoluteLayout на вашей странице, чтобы вы могли вызвать свой метод:

await Popper.Pop("Hello world", referenceToYourAbsoluteLayout, 5000);

Если вы все еще по какой-то причине хотите придерживаться этого точного решения, возможно, имеет смысл вместо этого использовать метод расширения. Однако это решение просто не имеет смысла для обычного пользователя.

P.S: Еще раз, пожалуйста, проверьте существующую ветку для получения дополнительной информации.

P.S.S: пример использования вашего кода

<!-- XXXPage.xaml -->
<?xml version="1.0" encoding="utf-8"?>
<ContentPage
    xmlns="http://xamarin.com/schemas/2014/forms"
    xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
    xmlns:local="clr-namespace:XXX"
    x:Class="XXX.XXXPage">
    <AbstractLayout x:name="myLayout />
</ContentPage>

// XXXPage.xaml.cs
public partial class XXXPage : ContentPage
{
    public Test999Page()
    {
        InitializeComponent();

    }

    async protected override void OnAppearing()
    {
        base.OnAppearing();
        await Popper.Pop("Hello world", myLayout, 5000);
    }
}
...