You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在指定位置显示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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 10:04:44