안드로이드에서 뒤로가기 버튼을 두번 눌렀을 경우 종료되는 것을 델파이로 만들어 보았다. 자바로 구현된 소스처럼 시간을 체크하여 동작을 처리한다. 구조 역시 비슷하게 만들었다.
뒤로가기 버튼을 두번 눌렀을 경우 종료가 되는 동작을 처리하는 uBackPressCloseHandler.pas 파일 생성.
unit uBackPressCloseHandler;
interface
uses System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, FMX.Types, FMX.Controls, FMX.Forms, FMX.Helpers.Android, Androidapi.JNI.GraphicsContentViewText, Androidapi.Helpers;
type TBackPressCloseHandler = class(TObject) backKeyPressedTime : Integer;
private Fform : TForm; FJContext : JContext; protected
public constructor Create(pForm: TForm; pActivityContext: JContext); property targetForm : TForm read Fform write Fform; property targetActivityContext : JContext read FJContext write FJContext;
procedure onBackPressed; end;
implementation
uses Androidapi.JNI.Toast;
{ TBackPressCloseHandler }
constructor TBackPressCloseHandler.Create(pForm: TForm; pActivityContext: JContext);begin Fform := pForm; FJContext := pActivityContext; backKeyPressedTime := StrToInt(FormatDateTime('DDyynnss', Now())) - 2;end;
procedure TBackPressCloseHandler.onBackPressed;var tempToast : JToast;begin if Assigned(Fform) then begin if StrToInt(FormatDateTime('DDyynnss', Now())) > backKeyPressedTime + 2 then begin backKeyPressedTime := StrToInt(FormatDateTime('DDyynnss', Now()));
CallInUiThread(procedure begin tempToast := TJToast.JavaClass.makeText(FJContext, StrToJCharSequence('''뒤로''버튼을 한번 더 누르시면 종료됩니다.'), TJToast.JavaClass.LENGTH_SHORT); tempToast.show; end);
Exit; end;
if StrToInt(FormatDateTime('DDyynnss', Now())) <= backKeyPressedTime + 2 then begin Fform.Close; end; end;end;
end.
해당 Form에서 uBackPressCloseHandler.pas 파일을 uses절에 불러놓고, BackPressCloseHandler 클래스변수를 정의.
type TForm1 = class(TForm) procedure FormKeyUp(Sender: TObject; var Key: Word; var KeyChar: Char; Shift: TShiftState); procedure FormCreate(Sender: TObject); private { Private declarations } BackPressCloseHandler : TBackPressCloseHandler;.....
.....
.....
Form 생성시 OnCreate 이벤트에서
BackPressCloseHandler을 생성자로 메모리 할당.
procedure TForm1.FormCreate(Sender: TObject);begin BackPressCloseHandler := TBackPressCloseHandler.Create(Self, SharedActivityContext);end;
뒤로가기 버튼이 눌렸다 떼어졌을 때 BackPressCloseHandler의 onBackPressed 프로시저 호출.
procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word; var KeyChar: Char; Shift: TShiftState);begin if Key = vkHardwareBack then begin Key := 0;
BackPressCloseHandler.onBackPressed; end;end;
'Program > Delphi-FireMonkey' 카테고리의 다른 글
[Delphi-FireMonkey] 안드로이드(Android) 리소스(Resource) 접근 및 이미지 적용 (2) | 2015.02.17 |
---|---|
[Delphi-FireMonkey] 안드로이드(Android) Toast API 적용 (0) | 2015.02.17 |