2016-08-09 6 views
0

Ich habe eine Funktion, die ich verwende, um die Orientierung für meine Anwendung in Xamarin zu lesen und es funktioniert auf anderen Geräten von Google und Samsung aber nicht der Pixel C.Pixel C meldet falsche Orientierung in Xamarin

 public DeviceOrientations GetOrientation() 
    { 
     IWindowManager windowManager = Android.App.Application.Context.GetSystemService(Context.WindowService).JavaCast<IWindowManager>(); 

     var rotation = windowManager.DefaultDisplay.Rotation; 
     bool isLandscape = rotation == SurfaceOrientation.Rotation90 || rotation == SurfaceOrientation.Rotation270; 
     return isLandscape ? DeviceOrientations.Landscape : DeviceOrientations.Portrait; 
    } 

Kann jeder Man rät mir, wie ich das Pixel C lösen soll? Oder ist das etwas auf der Xamarin Seite, die gelöst werden muss?

**** UPDATE **** Ich machte die Änderungen per Antwort und habe es hier aufgenommen.

  IWindowManager windowManager = Android.App.Application.Context.GetSystemService(Context.WindowService).JavaCast<IWindowManager>(); 
     bool isLandscape = false; 
     Android.Graphics.Point aSize = new Android.Graphics.Point(); 
     windowManager.DefaultDisplay.GetSize(aSize); 

     if (aSize.X > aSize.Y) 
     { 
      isLandscape = true; 
     } else 
     { 
      isLandscape = false; 
     } 
     return isLandscape ? DeviceOrientations.Landscape : DeviceOrientations.Portrait; 

Antwort

2

Rotation ist definiert als die Ausrichtung relativ zu der "default" Ausrichtung (https://developer.android.com/reference/android/view/Display.html#getRotation()) zu sein. Das Pixel C hat einen anderen "Standard" als Sie erwarten.

Normalerweise verwende ich getSize() (https://developer.android.com/reference/android/view/Display.html#getSize(android.graphics.Point)) und dann vergleichen Sie die Breite und Höhe, um festzustellen, ob ich im Hoch- oder Querformat bin.

+0

Vielen Dank - ich werde es mit meinen Codeänderungen für alle anderen aktualisieren, die über diese hinweg laufen. –