如何在指定位置显示Toast消息?Delphi Tokyo中TFMXToast位置调整
调整TFMXToast的显示位置(Delphi Tokyo)
当然可以调整Toast的显示位置!TFMXToast组件本身提供了基础的位置控制选项,要是需要更精细的偏移效果,还能结合平台特定代码实现自定义位置,下面分两种场景详细说明:
基础位置调整:使用组件自带属性
TFMXToast有个ToastPosition属性,它属于TTMXToastPosition枚举类型,可选值包括:
TPosition.Bottom(默认显示在底部)TPosition.Center(居中显示)TPosition.Top(顶部显示)
你可以在设计时直接在Object Inspector里修改这个属性,也能在运行时通过代码设置,比如:
// 运行时设置为居中显示 FMXToast1.ToastPosition := TPosition.Center; FMXToast1.Show('这是一条居中显示的Toast消息');
自定义偏移位置(针对Android/iOS平台)
如果默认的三个位置满足不了需求,想让Toast离顶部/底部有特定的像素偏移,就需要调用原生平台的API来实现:
Android平台
Android原生Toast支持设置重力方向和偏移量,我们可以通过TFMXToast的NativeToast属性获取原生对象,再进行调整:
uses FMX.Helpers.Android, Androidapi.JNI.Widget, Androidapi.JNI.GraphicsContentViewText; procedure ShowCustomToast(const Msg: string; Gravity: Integer; XOffset, YOffset: Integer); var NativeToast: JToast; begin NativeToast := FMXToast1.NativeToast; // 设置重力方向和偏移量 NativeToast.setGravity(Gravity, XOffset, YOffset); NativeToast.setText(StringToJString(Msg)); NativeToast.show; end; // 调用示例:在顶部下方100像素处显示Toast ShowCustomToast('自定义位置的Toast', Gravity.TOP, 0, 100);
这里的Gravity参数可以用Gravity.TOP/Gravity.CENTER/Gravity.BOTTOM,X/YOffset是相对于该重力方向的像素偏移值。
iOS平台
iOS没有原生Toast组件,FMXToast其实是用UIAlertController模拟实现的,我们可以通过调整其popoverPresentationController的参数来控制位置:
uses FMX.Helpers.iOS, iOSapi.UIKit, iOSapi.Foundation; procedure ShowCustomiOSToast(const Msg: string; YPos: Integer); var Alert: UIAlertController; Window: UIWindow; begin Alert := TFMXToast.Wrap(FMXToast1.NativeToast); Alert.setMessage(StringToNSString(Msg)); Window := TUIWindow.Wrap(TUIWindow.OCClass.keyWindow); Alert.popoverPresentationController.sourceView := Window.rootViewController.view; // 设置Toast的显示位置,iOS坐标原点为屏幕左上角 Alert.popoverPresentationController.sourceRect := CGRectMake(Window.bounds.size.width/2, YPos, 1, 1); Window.rootViewController.presentViewController(Alert, True, nil); end; // 调用示例:在屏幕垂直居中位置显示Toast ShowCustomiOSToast('iOS自定义位置Toast', Trunc(UIScreen.mainScreen.bounds.size.height/2));
注意事项
- 平台特定代码需要用
{$IFDEF ANDROID}或{$IFDEF IOS}包裹,避免跨平台编译出错 - 多平台项目中,记得把不同平台的代码放在对应的条件编译块里,确保每个平台只执行适配的逻辑
内容的提问来源于stack exchange,提问作者zac
相关产品推荐
相关产品推荐

