July 30, 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"]
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.