我一直在尝试使用Xamarin表单来获得类似于Android "toast“的功能。在环顾四周后,我发现了我认为是一个好的解决方案。一般的方法似乎是创建一个新的绝对布局,并使其在一段时间内出现,然后消失。虽然我认为我大体上理解正在做什么,但我似乎不能让它工作。如果我想让吐司出现在我的MainPage中,有没有人能建议我如何使用这个类?我应该在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);
}
}发布于 2018-05-08 03:17:41
在Android上,您不必重新发明轮子,因为Toast是原生存在的。在其他平台上没有像Toast这样的东西,因此这里没有银弹解决方案。这个问题已经被多个人以多种方式解决了,这就是为什么我留下了一个评论,说你的问题可能是带有多个示例的现有线程的副本。
现在谈谈你的想法。您的实现正在工作,但是它将仅在AbsoluteLayout上显示Toast。为什么要设置这样的限制呢?如果你重新检查我在评论中分享的链接,你会发现一个更合适、更优雅的解决方案。
我好像不能让它工作。
你只需要在你的页面上有一个AbsoluteLayout,这样你就可以调用你的方法了:
await Popper.Pop("Hello world", referenceToYourAbsoluteLayout, 5000);如果您仍然出于某种原因想要使用这个确切的解决方案,那么使用一个扩展方法可能会更有意义。然而,这个解决方案对于普通用户来说是没有意义的。
附言:请再次查看existing thread以了解更多信息和详细信息。
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);
}
}https://stackoverflow.com/questions/50207331
复制相似问题