Androidアプリを戻るボタンに反応させるにはどうすればよいですか?
それを処理するための高レベルのVCLのTApplicationEventsのようなものはありますか、それともここで低レベルのAndroid固有のものを深く掘り下げる必要がありますか?
現在、ほとんどのデモアプリケーションには、前の画面に戻るための画面上の戻るボタンがあります。 psysicalボタンを押すと、常にアプリが終了するように見え、状況によってはアクセス違反が発生します。
フォームのOnKey...
イベントの場合、AndroidではKey
パラメーターはvkHardwareBack
です。例えば:
uses
FMX.Platform, FMX.VirtualKeyboard;
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 (vksVisible in FService.VirtualKeyBoardState) then
begin
// Back button pressed, keyboard visible, so do nothing...
end else
begin
// Back button pressed, keyboard not visible or not supported on this platform, lets exit the app...
if MessageDlg('Exit Application?', TMsgDlgType.mtConfirmation, [TMsgDlgBtn.mbOK, TMsgDlgBtn.mbCancel], -1) = mrOK then
begin
// Exit application here...
end else
begin
// They changed their mind, so ignore the Back button press...
Key := 0;
end;
end;
end
...
end;
これがレミーの答えの更新されたコードです(シアトルで動作します):
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;
これを理解しようとしている人への将来の参照のために..
if Key = vkHardwareBack then
begin
// your code here
key := 0;
end;
キー:= 0;アプリが閉じないようにする秘訣です。
これは、OnKeyUpイベントの形式で行われます
これを試して:
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;
以前のメッセージでごめんなさい。それはアプリケーションを終了することについてでした。
前の画面に戻るかどうかは、アプリケーションの設計によって異なります。
ページの表示にTTabControl
を使用した場合は、前のTTabItem
に移動できます。ページの表示にTForms
を使用した場合は、現在のフォームを閉じて前の画面に戻るためにClose()
プロシージャを使用する必要があります。