![]() |
Kann man die ScreenOrientation per Runtime festlegen ?
Hallo zusammen,
ich möchte in meiner Fmx App (RadStudio XE8 Pro, Upd1), für verschiedene Views verschiederne ScreenOrientations festlegen. Dazu gibe es einen ScreenService, der das wie folgt machen soll:
Code:
Damit das funktinoiert (auch die Events bei OnOrientationChange übrigens), muss wohl in
// Sets the possible Screen orientations (Portrait, Landscape, InvertedPortrait, InvertedLandscape);
procedure Screen_Orientation_Set(const orientSet : TScreenOrientations ); var ScreenService: IFMXScreenService; begin if TPlatformServices.Current.SupportsPlatformService(IFMXScreenService, IInterface(ScreenService)) then begin ScreenService.SetScreenOrientation(orientSet); end; end; den Options\Application\Orientation die ![]() Soweit, so gut. Aber wenn ich weiter in die Sourcen schaue sieht es bei iOS so aus:
Code:
Das ist offenbar nie dafür gedacht gewesen die ScreenOrientation mal eben per Runtime festzulegen,
procedure TPlatformCocoaTouch.SetScreenOrientation(
AOrientations: TScreenOrientations); begin // Not needed for iOS end; sondern einmal für die ganze App. Bei Android gibt es etwas im Sourcecode, das muss ich noch ausprobieren, aber ich möchte das halt für beide gleich haben. Ich möchte halt die eine View so festlegen:
Code:
und die andere View z.B. so:
Screen_Orientation_Set([Portrait, Landscape, InvertedPortrait, InvertedLandscape] );
Code:
Geht das überhaupt, und wenn ja wie ?
Screen_Orientation_Set([Portrait, InvertedPortrait, ] );
Der ScreenOrientation Service scheint jedenfalls nicht dafür zu gebrauchen zu sein (wofür er dann überhaupt da ist wäre noch eine andere Frage ...). Rolf |
AW: Kann man die ScreenOrientation per Runtime festlegen ?
ich habe nach ein bischen Recherche noch ältere Beiträge dazu gefunden, aber
insbesondere beim Checken der Soureces bin ich auf einen Weg gestossen der viel einfacher ist. Ob das unter Android läuft weiss ich noch nicht, unter iOS scheint es jedenfalls gut zu laufen: Es reicht offenar einfach die Orientation im Application Object per FormFaktor zu setzen, dann wird das von den iOS Routinen korrekt verarbeitet.
Code:
Ist vielleicht ein "Hack", aber ein recht schöner :stupid:
procedure Update_FormFactor(FormFactor: TFormFactor; const orientSet : TScreenOrientations);
begin FormFactor.Orientations := orientSet; end; procedure Form_Orientation_Set(const orientSet : TScreenOrientations ); var ScreenService: IFMXScreenService; begin {$IFDEF IOS} Update_FormFactor(Application.FormFactor, orientSet); {$ELSE IOS} if TPlatformServices.Current.SupportsPlatformService(IFMXScreenService) then begin ScreenService := TPlatformServices.Current.GetPlatformService(IFMXScreenService) as IFMXScreenService; ScreenService.SetScreenOrientation(OrientSet); end; {$ENDIF IOS} end; Mit etwas Glück reicht das so auch für Android aus, dann kann ich die Platformservides wieder rausschmeissen. Rollo |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:12 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz