How can I disable landscape mode for some of the views in my Android app?
Add android:screenOrientation="portrait"
to the activity in the AndroidManifest.xml. For example:
<activity android:name=".SomeActivity"
android:label="@string/app_name"
android:screenOrientation="portrait" />
EDIT: Since this has become a super-popular answer, I feel very guilty as forcing portrait is rarely the right solution to the problems it's frequently applied to.
The major caveats with forced portrait:
retainInstance
fragments.So most apps should just let the phone sensors, software, and physical configuration make their own decision about how the user wants to interact with your app. A few cases you may still want to think about, though, if you're not happy with the default behavior of sensor
orientation in your use case:
nosensor
for the orientation. This forces landscape on most tablets and portrait on most phones, but I still wouldn't recommend this for most "normal" apps (some users just like to type in the landscape softkeyboard on their phones, and many tablet users read in portrait - and you should let them).sensorPortrait
may be better than portrait
for Android 2.3+; this allows for upside-down portrait, which is quite common in tablet usage.<android . . . >
. . .
<manifest . . . >
. . .
<application>
<activity android:name=".MyActivity"
android:screenOrientation="portrait"
android:configChanges="keyboardHidden|orientation">
</activity>
</application>
</manifest>
</android>
You should change android:screenOrientation="sensorPortrait"
in AndroidManifest.xml
You can force your particular activity to always remain in portrait mode by writing this in your manifest.xml
<activity android:name=".MainActivity"
android:screenOrientation="portrait"></activity>
You can also force your activity to remain in postrait mode by writing following line in your activity's onCreate() method
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.your_layout);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
Either in manifest class.
<activity android:name=".yourActivity"
....
android:screenOrientation="portrait" />
or programmatically
setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
Note : you should call this before setContentView
method for your activity in onCreate()
.
In hopes to help someone else, the following attribute on the ACTIVITY in AndroidManifest.xml is all you need:
android:configChanges="orientation"
So, full activity node:
<activity android:name="Activity1"
android:icon="@drawable/icon"
android:label="App Name"
android:configChanges="orientation">