Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Delphi Android - detect device orientation change

New to both Delphi Android development. How do I detect that the screen orientation has changed? i.e. from Portrait to Landscape and vice versa? And how do I fire off code when this happens? For example I have an image sized at let's say 300x200 in portrait mode but when the device switches to landscape I want it to adjust and take up full screen width.

like image 832
tangosdad Avatar asked Mar 15 '23 17:03

tangosdad


1 Answers

In your form implement a method

procedure DoOrientationChanged(const Sender: TObject; const M: TMessage);

where you handle the current orientation. Subscribe for orientation changes in FormCreate like this

TMessageManager.DefaultManager.SubscribeToMessage(TOrientationChangedMessage, DoOrientationChanged);

and unsubscribe in FormDestroy like this:

TMessageManager.DefaultManager.Unsubscribe(TOrientationChangedMessage, DoOrientationChanged);

To find out the current screen orientation just ask IFMXScreenService:

var
  screenService: IFMXScreenService;
begin
  if TPlatformServices.Current.SupportsPlatformService(IFMXScreenService, screenService) then begin
    case screenService.GetScreenOrientation of
      TScreenOrientation.Portrait: ;
      TScreenOrientation.Landscape: ;
      TScreenOrientation.InvertedPortrait: ;
      TScreenOrientation.InvertedLandscape: ;
    end;
  end;
end;
like image 67
Uwe Raabe Avatar answered Mar 24 '23 17:03

Uwe Raabe