Xamarin.forms 创建一个;吐司;

Xamarin.forms 创建一个;吐司;,xamarin.forms,toast,Xamarin.forms,Toast,我一直在尝试使用Xamarin表单获得与Android“toast”类似的功能。环顾四周后,我发现我认为是一个很好的解决办法。一般的方法似乎是制作一个新的绝对布局,并在设定的时间内显示,然后消失。虽然我认为我大体上理解正在做的事情,但我似乎无法让它发挥作用。如果我想在主页上发表祝酒词,有人能建议我如何使用这个类吗?我应该在XAML文件中添加AbsoluteLayout吗?对不起,我肯定这是一个简单的问题,但我真的不知道该怎么办 任何帮助都将不胜感激 public static class Pop

我一直在尝试使用Xamarin表单获得与Android“toast”类似的功能。环顾四周后,我发现我认为是一个很好的解决办法。一般的方法似乎是制作一个新的绝对布局,并在设定的时间内显示,然后消失。虽然我认为我大体上理解正在做的事情,但我似乎无法让它发挥作用。如果我想在主页上发表祝酒词,有人能建议我如何使用这个类吗?我应该在XAML文件中添加AbsoluteLayout吗?对不起,我肯定这是一个简单的问题,但我真的不知道该怎么办

任何帮助都将不胜感激

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);
    }
}

Android
上,您不必重新发明轮子,因为
Toast
是本机存在的。在其他平台上没有像Toast这样的东西,因此这里没有银弹解决方案。这个问题已经由多个人以多种方式解决了,这就是为什么我留下评论说你的问题可能是现有线程的重复,有多个示例

现在谈谈你的想法。您的实现正在工作,但是它将仅在
绝对布局上显示
Toast
。为何要作出这样的限制?如果你重新检查我在评论中分享的链接,你会发现一个更合适、更优雅的解决方案

我似乎无法让它工作

您只需在页面上添加一个
绝对布局
,即可调用您的方法:

await Popper.Pop("Hello world", referenceToYourAbsoluteLayout, 5000);
如果出于某种原因,您仍然希望坚持使用这个精确的解决方案,那么使用扩展方法可能是有意义的。然而,这种解决方案对于普通用户来说毫无意义

附言:再一次,请查看更多信息和细节

附:代码片段的使用示例

<!-- 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);
    }
}


这真的是重复的吗?我正在发布特定的代码,并请求使用它的帮助。我不清楚如何实现Pop方法签名中所要求的AbsoluteLayout。我要问的方法的优点之一是定制toast应该相对容易。因此,如果有人能提供一些指导,我将非常感兴趣。嗨,埃夫斯,谢谢你的建议。我的问题是:我应该把绝对布局放在哪里?你说把它放在我的“页面”上。由此,我明白我应该:1)在MainPage.xaml文件中嵌套一个AbsoluteLayout,或者在MainPage.cs文件中以编程方式创建一个新的AbsoluteLayout。哪一个最好?此外,我认为这种方法很有用的原因是(至少对我来说)在多个平台上创建“自定义toast”(例如字体大小、颜色、大小等)似乎要容易得多。“XAML还是编程?”->什么是苹果还是瓜更好?品味或什么最适合你。“例如字体大小、颜色、大小等。”使用自定义渲染器/特定于平台的实现,您将拥有更广泛的自定义范围。苹果要好得多。我还没有找到一个我认为可以吃的甜瓜。回到代码讨论,我的印象是XAML更适合这种类型的东西,因为它更适合基于MVVM方法。。。虽然不是很确定,但只是想检查一下。@EvZ,所以。。。我还是有点困。假设我想使用xaml。据我所知,我会在主项目中添加一个新的xaml文件,并将我的“absolutelayout”放在这个xaml文件中?然后使用“wait Popper.Pop”方法调用这个文件?这是我尝试过的,但我似乎什么都做不到。实际上,我无法从主页调用absolutelayout(在不同的文件中生成)。我知道这可能很简单,但我被卡住了。有什么建议吗?从您的问题中,我了解到您误解了Xamarin.Forms的基本概念,并且您不理解共享代码片段,因此我强烈建议您重新阅读或熟悉Xamarin.Forms官方文档。我更新了我的答案,并提供了一个非常基本的例子。MVVM可以在没有XAML的情况下实现,请阅读。由于您是SO的新手,请熟悉下一个概念:请记住,SO不是代码编写服务提供商。祝你好运