如何以 xamarin 形式在屏幕顶部显示小吃店或烤面包
Posted
技术标签:
【中文标题】如何以 xamarin 形式在屏幕顶部显示小吃店或烤面包【英文标题】:How to display a snackbar or toast at top of the screen in xamarin forms 【发布时间】:2021-10-16 11:17:03 【问题描述】:我在 xamarin 项目中实现了snackbar。 但我需要在屏幕顶部显示该小吃栏。
代码:
SnackBarOptions options = new SnackBarOptions
MessageOptions = new MessageOptions
Foreground = Color.Black,
Message = toastMsg,
Padding= 15
,
BackgroundColor = Color.White,
Duration = TimeSpan.FromSeconds(8),
CornerRadius = 15,
IsRtl = true,
;
Application.Current.MainPage.DisplaySnackBarAsync(options);
【问题讨论】:
【参考方案1】:您需要编写自定义平台特定代码来实现此目的:
安卓:
GradientDrawable shape = new GradientDrawable();
shape.SetCornerRadius(15); //For Corner radius
shape.SetColor(android.Graphics.Color.Black);
var contentView = Xamarin.Essentials.Platform.CurrentActivity?.FindViewById(Android.Resource.Id.Content);
Snackbar snackBar = Snackbar.Make(contentView, "Your Message", 5000);
Android.Views.View view = snackBar.View;
view.SetBackground(shape);
FrameLayout.LayoutParams frameLayout = (FrameLayout.LayoutParams)view.LayoutParameters;
frameLayout.Gravity = GravityFlags.Top;
view.LayoutParameters = frameLayout;
snackBar.Show();
【讨论】:
我需要在 ios 和 Android 中都显示 @Himanshu Dwivedi 有任何文章可以实现自定义 toast 消息 @Priyanka 你可以使用包含iOS平台snackbar实现的Xamarin.Essential工具包代码,并将Constraint设置为Top (NSLayoutConstraint) Toast 实现文章:c-sharpcorner.com/article/xamarin 如果这对你有用,请投票 snackbar 显示全屏宽度。 frameLayout.SetMargins(20, 30, 20, 20);无法正常工作。 而且我也无法提供圆角半径@Hinamshu Dwivedi【参考方案2】:是的,您可以使用Xamarin.Forms DependencyService 来实现。
请参考以下代码:
1.在表单中创建接口IToast
:
public interface IToast
void Show(string message);
2.在android中,创建类Toast_Android
来实现接口IToast
,并将重力设置为GravityFlags.Top
:
[assembly: Xamarin.Forms.Dependency(typeof(Toast_Android))]
namespace ToastApp.Droid
public class Toast_Android : IToast
public void Show(string message)
Toast toast = Toast.MakeText(Android.App.Application.Context, message, ToastLength.Long);
View view = toast.View;
view.SetBackgroundColor(Color.Yellow);
TextView text = (TextView)view.FindViewById(Android.Resource.Id.Message);
text.SetTextColor(Color.Red);
toast.SetGravity(GravityFlags.Top, 0, 0);
toast.Show();
注意:
3.在ios中,创建类Toast_IOS
来实现接口IToast并设置视图的位置:
[assembly: Xamarin.Forms.Dependency(typeof(Toast_IOS))]
namespace ToastApp.iOS
public class Toast_IOS : IToast
const double LONG_DELAY = 3.5;
NSTimer alertDelay;
UIViewController alert;
const float DialogWith = 160;
public void Show(string message)
ShowAlert(message, LONG_DELAY);
void ShowAlert(string message, double seconds)
alertDelay = NSTimer.CreateScheduledTimer(seconds, (obj) =>
dismissMessage();
);
alert = new UIViewController();
UILabel view = new UILabel();
int DeviceWidth = (int)UIScreen.MainScreen.Bounds.Width;
float position = (DeviceWidth - DialogWith) / 2;
view.Frame = new CoreGraphics.CGRect(position, 0, DialogWith, 100);
view.Text = message;
// you can customize the style as you want
view.TextColor = UIColor.Red;
view.BackgroundColor = UIColor.Yellow;
alert.View.Add(view);
UIApplication.SharedApplication.KeyWindow.RootViewController.PresentViewController(alert, true, null);
void dismissMessage()
if (alert != null)
alert.DismissViewController(true,null);
if (alertDelay != null)
alertDelay.Dispose();
【讨论】:
张如何使用这些自定义类设置背景颜色和文本颜色 在 ios 中可以随意改变背景颜色和文字颜色,例如:view.TextColor = UIColor.Red; view.BackgroundColor = UIColor.Yellow;
张我需要更改Android toast消息txt颜色并且还需要提供圆角半径。
我已经更新了我的答案,你可以检查一下。
Zhang 如何在 toast 内部提供 padding 以及给 toast 提供圆角半径以上是关于如何以 xamarin 形式在屏幕顶部显示小吃店或烤面包的主要内容,如果未能解决你的问题,请参考以下文章