在安卓开发中,有时候我们希望使用Toast,Delphi已经为我们提供了使用接口,但仍然不是很方便,通过一些简单的封装,就可以方便的使用原生Toast。
直接上代码
封装代码
unit u_Toast;
interface
uses
System.SysUtils, System.Types, System.Classes
{$IFDEF ANDROID}
, FMX.Helpers.Android, Androidapi.JNI.app, Androidapi.JNIBridge,
Androidapi.JNI.JavaTypes, Androidapi.Helpers, Androidapi.JNI.Widget
{$ENDIF}
;
type
TToastLength = record
const
ShortToast = 0;
LongToast = 1;
end;
TGravity = record
const
AXIS_CLIP = 8;
AXIS_PULL_AFTER = 4;
AXIS_PULL_BEFORE = 2;
AXIS_SPECIFIED = 1;
AXIS_X_SHIFT = 0;
AXIS_Y_SHIFT = 4;
BOTTOM = 80;
CENTER = 17;
CENTER_HORIZONTAL = 1;
CENTER_VERTICAL = 16;
CLIP_HORIZONTAL = 8;
CLIP_VERTICAL = 128;
DISPLAY_CLIP_HORIZONTAL = 16777216;
DISPLAY_CLIP_VERTICAL = 268435456;
&END = 8388613;
FILL = 119;
FILL_HORIZONTAL = 7;
FILL_VERTICAL = 112;
HORIZONTAL_GRAVITY_MASK = 7;
LEFT = 3;
NO_GRAVITY = 0;
RELATIVE_HORIZONTAL_GRAVITY_MASK = 8388615;
RELATIVE_LAYOUT_DIRECTION = 8388608;
RIGHT = 5;
START = 8388611;
TOP = 48;
VERTICAL_GRAVITY_MASK = 112;
end;
/// <summary>
/// 显示安卓原生Toast
/// </summary>
/// <param name="msg">需要显示的内容</param>
/// <param name="duration">显示时间长短</param>
procedure Toast(const msg: string;
duration: Integer = TToastLength.ShortToast); overload;
/// <summary>
/// 显示安卓原生Toast
/// </summary>
/// <param name="msg">需要显示的内容</param>
/// <param name="duration">显示时间长短</param>
/// <param name="gravity">显示的位置</param>
/// <param name="xOffset,yOffset">坐标设置</param>
procedure Toast(const msg: string; duration: Integer; gravity: Integer;
xOffset: Integer; yOffset: Integer); overload;
implementation
procedure Toast(const msg: string; duration: Integer = TToastLength.ShortToast);
begin
{$IFDEF ANDROID}
CallInUiThread(
procedure
begin
TJToast.JavaClass.makeText(TAndroidHelper.Activity,
StrToJCharSequence(msg), duration).show;
end);
{$ENDIF}
end;
procedure Toast(const msg: string; duration: Integer; gravity: Integer;
xOffset: Integer; yOffset: Integer);
{$IFDEF ANDROID}
var
vToast: JToast;
{$ENDIF}
begin
{$IFDEF ANDROID}
CallInUiThread(
procedure
begin
vToast := TJToast.JavaClass.makeText(TAndroidHelper.Activity,
StrToJCharSequence(msg), duration);
vToast.setGravity(gravity, xOffset, yOffset);
vToast.show;
end);
{$ENDIF}
end;
end.
使用
封装了两个过程。具体使用方法如下:
procedure TForm5.Button1Click(Sender: TObject);
begin
Toast('这是一个默认的Toast.');
end;
procedure TForm5.Button2Click(Sender: TObject);
begin
Toast('居中后向下向右偏离50,显示Toast.',TToastLength.ShortToast,TGravity.CENTER,50,50);
Toast('居中的Toast.',TToastLength.LongToast,TGravity.CENTER,0,0);
end;
第二个方法是可以自定义Toast显示位置的。
引用文件
只需要在你的项目中引用这个Pas文件就可以使用,当然需要配置好搜索路径(也可以直接将文件加到项目中)
uses
u_Toast;
后话
安卓原生Toast使用中还可以显示图片、标题等信息,那些是高级使用方式,今天就暂时不介绍了。
今天的内容已上传到下载里,《Delphi开发安卓APP中使用原生Toast》,主要代码在文章中都有,也可以直接复制使用。
相关文章导读
《Delphi D10.X安卓开发中按两次返回键退出系统的方法》 演示了Toast真实的使用场景。
新增加:
《Delphi D10.X安卓APP开发让原生Toast显示图片》一个Toast更高级的用法。
(点击上面标题后直接查看)
欢迎光顾本人小店:(https://shop63778938.taobao.com/)
小店也提供delphi方面其他技术支持、定制开发。
大家有什么不清楚的,可以给我留言或讨论。
以上信息对您有用的话请点赞收藏,就下面这行