- Status: Reported
- Priority: Major
- Resolution: Unresolved
- Platform: Android
- Affects version 1.20.1.0
По умолчанию FGX Native перехватывает нажатие системной кнопки vkHardwareBack на уровне формы. По умолчанию, если такая кнопка прилетает форме, то форма закрывается. Чтобы переопределить это поведение, нужно повесить обработчик на событие TfgForm.OnKey, оно вызывается на нажатие и отпускание базовых кнопок. В нем нужно поймать кнопку vkHardwareBack (например на главной форме), чтобы запретить закрытие формы и сообщить системе, что вы сами выполняете обработку этой кнопки, путем проставления значения в параметр AHandled = True. Пример ниже демонстрирует предотвращение закрытия текущей формы при нажатии на кнопку vkHardwareBack.
procedure TfmMain.fgFormKey(Sender: TObject; const AKey: TfgKey; var AHandled: Boolean); begin if (AKey.Action = TfgKeyAction.Up) and (AKey.Code = vkHardwareBack) then AHandled := True; end;Собственно, если вы хотите сделать закрытие по двойному тапу на кнопку Back, то нужно зафиксировать время первого нажатия и на втором проверять сколько времени прошло:
procedure TfmMain.fgFormKey(Sender: TObject; const AKey: TfgKey; var AHandled: Boolean); const DoubleTapDuration = 2000; // msec begin if (AKey.Action = TfgKeyAction.Up) and (AKey.Code = vkHardwareBack) then begin AHandled := True; if FBackPressed + DoubleTapDuration > MilliSecondOfTheDay(Now) then AHandled := False // Оставляем поведение по умолчанию - закрытие формы. else begin FBackPressed := MilliSecondOfTheDay(Now); TfgToast.Show('Нажмите ещё раз для выхода'); end end; end;
Этот трюк теперь не работает на 16 андроиде. В варианте с изменением файла манифеста (добавление android:enableOnBackInvokedCallback="false") работает, как и ожидается.
Recommended Comments
Create an account or sign in to comment