While working on a game called Drainpipe, we had a requirement to display the game always in Landscape left mode. We set proper attributes in our AndroidActivity class :
[Activity(Label = "DrainPipe",
Icon = "@drawable/icon",
ScreenOrientation = ScreenOrientation.SensorLandscape,
MainLauncher = true,
LaunchMode = LaunchMode.SingleTask,
ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation)]
And also in the constructor,
this.DefaultOrientation = WaveEngine.Common.Input.DisplayOrientation.LandscapeLeft;
this.SupportedOrientations = WaveEngine.Common.Input.DisplayOrientation.LandscapeLeft;
And also in manifest file,
<activity android:name="com.google.android.gms.ads.AdActivity" android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize" android:theme="@android:style/Theme.Translucent" />
All these changes, made sure that the game is only playable in Landscape mode but still when you tilt the phone it still allows the app to rotate it to Landscape Right. Since the game heavily depends on user movements based on accelerometer, it was kind of ruining the experience. When too much tilt happens screen rotates back to Landscape right and make the game not playable any more. Even disabling the rotation in android phone does not help.
To stop that finally found a hack, where you need to override the RequestedOrientation and set that to Landscape.
public override ScreenOrientation RequestedOrientation
base.RequestedOrientation = ScreenOrientation.Landscape;
This seems to work like a charm. Now no matter how much user tilt the phone, it never goes back to Landscape right.