How to detect screen orientation of the device in Xamarin.Forms?

cross-platform, xamarin, xamarin.forms

Solution

I tried it with dependency injection, but no succes yet. Right now, I solved it like this:

- Use `OnSizeAllocated(double, double)` for changing the screen on orientation changes.

- Use a Singleton for storing the current orientation.

Xamarin.Forms Page

protected override void OnSizeAllocated(double width, double height)
{
    base.OnSizeAllocated(width, height);

    if (DeviceInfo.IsOrientationPortrait() && width > height || !DeviceInfo.IsOrientationPortrait() && width < height)
        {
            // Orientation got changed! Do your changes here
        }
}

Singleton Class

public class DeviceInfo
{
    protected static DeviceInfo _instance;
    double width;
    double height;

    static DeviceInfo()
    {
        _instance = new DeviceInfo();
    }
    protected DeviceInfo()
    {
    }

    public static bool IsOrientationPortrait() 
    {
        return _instance.height > _instance.width;
    }

    public static void SetSize(double width, double height)
    {
        _instance.width = width;
        _instance.height = height;
    }
}

Problem

How to detect screen orientation change in Xamarin Forms? I need to change the view on orientation change, what should I do to trigger a change on orientation change? Providing a link or sample code would be very helpful. Thanks in advance

Original source