Android アプリを戻るボタンに反応させるにはどうすればよいですか?
それを処理する高レベルの VCL の TApplicationEvents のようなものはありますか、それともここで低レベルの Android 固有のものを深く掘り下げる必要がありますか?
現在、ほとんどのデモ アプリケーションには、前の画面に戻るための画面上の戻るボタンがあります。物理的なボタンを押すと、常にアプリが終了するように見え、場合によってはアクセス違反が発生します。
Android アプリを戻るボタンに反応させるにはどうすればよいですか?
それを処理する高レベルの VCL の TApplicationEvents のようなものはありますか、それともここで低レベルの Android 固有のものを深く掘り下げる必要がありますか?
現在、ほとんどのデモ アプリケーションには、前の画面に戻るための画面上の戻るボタンがあります。物理的なボタンを押すと、常にアプリが終了するように見え、場合によってはアクセス違反が発生します。
レミーの答えの更新されたコードは次のとおりです(シアトルで動作します):
procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word; var KeyChar: Char; Shift: TShiftState);
var
FService : IFMXVirtualKeyboardService;
begin
if Key = vkHardwareBack then
begin
TPlatformServices.Current.SupportsPlatformService(IFMXVirtualKeyboardService, IInterface(FService));
if (FService <> nil) and (TVirtualKeyboardState.Visible in FService.VirtualKeyBoardState) then
begin
// Back button pressed, keyboard visible, so do nothing...
end else
begin
Key := 0;
// Back button pressed, keyboard not visible or not supported on this platform, lets exit the app...
MessageDlg('Exit Application?', TMsgDlgType.mtConfirmation, [TMsgDlgBtn.mbOK, TMsgDlgBtn.mbCancel], -1, OnCloseDialog);
end;
end;
end;
procedure TForm1.OnCloseDialog(Sender: TObject; const AResult: TModalResult);
begin
if AResult = mrOK then
Close;
end;
これを試して:
uses FMX.Platform,FMX.VirtualKeyboard,FMX.Helpers.Android;
procedure THeaderFooterForm.FormKeyUp(Sender: TObject; var Key: Word;
var KeyChar: Char; Shift: TShiftState);
var FService : IFMXVirtualKeyboardService;
begin
if Key = vkHardwareBack then
begin
TPlatformServices.Current.SupportsPlatformService(IFMXVirtualKeyboardService, IInterface(FService));
if (FService <> nil) and (vksVisible in FService.VirtualKeyBoardState) then
begin
// Back button pressed, keyboard visible, so do nothing...
end
else
begin
if MessageDlg('Exit Application?', TMsgDlgType.mtConfirmation, [TMsgDlgBtn.mbOK, TMsgDlgBtn.mbCancel], -1) = mrOK then
begin
// Exit application here...
SharedActivity.Finish;
end;
end;
end
else
// Menu button pressed
if Key = sgiUpRightLong then
begin
showmessage('Menu button pressed');
end;
end;