by tanyapodolskaia

Xamarin Tips: Change screen orientation with MessagingCenter

Tuğçe Arar
1 min readApr 2, 2021

--

We can force the pages into Landscape mode at runtime as needed. UWP, iOS and Android require different approach, so here’s how we can handled it.

Xamarin.Forms:

public partial class MyAwesomePage : ContentPage
{
public MyAwesomePage()
{
InitializeComponent();
}
protected override void OnAppearing()
{
base.OnAppearing();
MessagingCenter.Send(this, "SetLandscapeModeOn");
}
protected override void OnDisappearing()
{
base.OnDisappearing();
MessagingCenter.Send(this, "SetLandscapeModeOff");
MessagingCenter.Unsubscribe<MyAwesomePage>(this, "SetLandscapeModeOff");
}
}

iOS:

public partial class AppDelegate : global::Xamarin.Forms.Platform.iOS.FormsApplicationDelegate
{
public override bool FinishedLaunching(UIApplication app, NSDictionary options)
{
global::Xamarin.Forms.Forms.Init();
LoadApplication(new App());
MessagingCenter.Subscribe<MyAwesomePage>(this, "SetLandscapeModeOn", sender =>
{
UIDevice.CurrentDevice.SetValueForKey(new NSNumber((int)UIInterfaceOrientation.LandscapeLeft), new NSString("orientation"));
});
MessagingCenter.Subscribe<MyAwesomePage>(this, "SetLandscapeModeOff", sender =>
{
UIDevice.CurrentDevice.SetValueForKey(new NSNumber((int)UIInterfaceOrientation.Portrait), new NSString("orientation"));
});
return base.FinishedLaunching(app, options);
}
}

Android:

public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity
{
protected override void OnCreate(Bundle savedInstanceState)
{
TabLayoutResource = Resource.Layout.Tabbar;
ToolbarResource = Resource.Layout.Toolbar;
base.OnCreate(savedInstanceState); Xamarin.Essentials.Platform.Init(this, savedInstanceState);
global::Xamarin.Forms.Forms.Init(this, savedInstanceState);
LoadApplication(new App());
MessagingCenter.Subscribe<MyAwesomePage>(this, "SetLandscapeModeOn", sender =>
{
RequestedOrientation = ScreenOrientation.Landscape;
});
MessagingCenter.Subscribe<MyAwesomePage>(this, "SetLandscapeModeOff", sender =>
{
RequestedOrientation = ScreenOrientation.Portrait;
});
}
}

UWP:

sealed partial class App : Application
{
protected override void OnLaunched(LaunchActivatedEventArgs e)
{
...
Window.Current.Activate();
Xamarin.Forms.MessagingCenter.Subscribe<MyAwesomePage>(this, "SetLandscapeModeOn", sender =>
{
DisplayInformation.AutoRotationPreferences = DisplayOrientations.Landscape;
});
Xamarin.Forms.MessagingCenter.Subscribe<MyAwesomePage>(this, "SetLandscapeModeOff", sender =>
{
DisplayInformation.AutoRotationPreferences = DisplayOrientations.Portrait;
});
}

--

--