December 19, 2014

Rotational Forces, Part Five

In past posts in the Rotational Forces series, we have seen how to have your activity react to screen rotations, as well as how to force your activity to remain in one orientation (e.g., portrait).

However, we haven’t covered the iPhone Scenario.

You may have seen one (or several) commercials for the iPhone, showing how the screen rotates just by turning the device. By default, you do not get this behavior with the T-Mobile G1 — instead, the screen rotates based on whether the keyboard is open or closed.

However, it is very easy for you to change this behavior, so your screen will rotate based on the position of the phone: just add android:screenOrientation=”sensor” to your AndroidManifest.xml file:

[sourcecode language=”xml”]
apk/res/android"
package="com.commonsware.android.rotation.five"
android:versionCode="1"
android:versionName="1.0.0">

android:screenOrientation="sensor"
android:label="@string/app_name">







[/sourcecode]

The “sensor”, in this case, tells Android you want the accelerometers to control the screen orientation, so the physical shift in the device orientation controls the screen orientation.

At least on the G1, this appears to only work when going from the traditional upright portrait position to the traditional landscape position — rotating 90 degrees counter-clockwise. Rotating the device 90 degrees clockwise results in no change in the screen.

Also note that this setting disables having the keyboard trigger a rotation event. Leaving the device in the portrait position, if you slide out the keyboard, in a “normal” Android activity, the screen will rotate; in a android:screenOrientation=”sensor” activity, the screen will not rotate.



  • http://www.androidactivity.com/ mmoussa

    The behavior that I usually want does not seem like it is possible with the screenOrientation options. For most applications I am seeing that I want the sensor to work when the keyboard is closed, so that if you turn it sideways it will change from portrait to landscape mode. But when the keyboard is open I want it to be in landscape mode no matter what the sensor is. Is there a set of options that would allow me to do this? I think this is only possible using configChanges and managing it yourself, but it may involve a lot more work as the author alluded to in Rotational forces part 3. You may think that the best thing would be to just put it in sensor mode, but the sensor does not always work great, especially if you lay the device flat (which you would do sometimes when typing).

    This rotational mode that I want would be perfect for apps like the browser, where you would read/view in landscape mode or potrait mode, but you would only put input in landscape mode because of the orientation of the keyboard.

    • liz

      did you ever get an answer for this mmoussa?

  • Pingback: Sweeten Your Honeycomb Experience with HD Widgets « Mr. Android