How to set entire application in portrait mode only?

Android

Android Problem Overview


How do I set it so the application is running in portrait mode only? I want the landscape mode to be disabled while the application is running. How do I do it programmatically?

Android Solutions


Solution 1 - Android

For any Android version
From XML

You can specify android:screenOrientation="portrait" for each activity in your manifest.xml file. You cannot specify this option on the application tag.

From Java

Other option is to do it programmatically, for example in an Activity base class:

@Override
public void onCreate(Bundle savedInstanceState) {
  setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
For Android 4+ (API 14+)

Last option is to do it with activity lifecycle listeners which is only available since Android 4.0 (API 14+). Everything happens in a custom Application class:

@Override
public void onCreate() {
    super.onCreate();  
    registerActivityLifecycleCallbacks(new ActivityLifecycleAdapter() {
        @Override
        public void onActivityCreated(Activity a, Bundle savedInstanceState) {
            a.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
        }
    });
}

ActivityLifecycleAdapter is just a helper class you'll need to create which will be an empty implementation of ActivityLifecycleCallbacks (so you don't have to override each and every methods of that interface when you simply need one of them).

Solution 2 - Android

Yes you can do this both programmatically and for all your activities making an AbstractActivity that all your activities extends.

public abstract class AbstractActivity extends Activity {
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
	}
}

This abstract activity can also be used for a global menu.

Solution 3 - Android

You can do this for your entire application without having to make all your activities extend a common base class.

The trick is first to make sure you include an Application subclass in your project. In its onCreate(), called when your app first starts up, you register an ActivityLifecycleCallbacks object (API level 14+) to receive notifications of activity lifecycle events.

This gives you the opportunity to execute your own code whenever any activity in your app is started (or stopped, or resumed, or whatever). At this point you can call setRequestedOrientation() on the newly created activity.

class MyApp extends Application {

    @Override
    public void onCreate() {
        super.onCreate();  

        // register to be informed of activities starting up
        registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {

            @Override
            public void onActivityCreated(Activity activity, 
                                          Bundle savedInstanceState) {

                // new activity created; force its orientation to portrait
                activity.setRequestedOrientation(
                    ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

            }

            ....

        });

    }
}

Solution 4 - Android

You can set this in your manifest file..

android:name=".your launching activity name"
android:screenOrientation="portrait"

and you can also achive the same by writing the code in your class file like:

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

Solution 5 - Android

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">

Solution 6 - Android

Use:

android:screenOrientation="portrait" 

Just write this line in your application's manifest file in each activity which you want to show in portrait mode only.

Solution 7 - Android

Write this to your manifest file, for every activity:

android:screenOrientation="portrait" 

Solution 8 - Android

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);


    //setting screen orientation locked so it will be acting as potrait
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LOCKED);
}

Solution 9 - Android

As from Android developer guide :

> "orientation" The screen orientation has changed — the user has > rotated the device. Note: If your application targets API level 13 or > higher (as declared by the minSdkVersion and targetSdkVersion > attributes), then you should also declare the "screenSize" > configuration, because it also changes when a device switches between > portrait and landscape orientations. > > "screenSize" The current available screen size has changed. This > represents a change in the currently available size, relative to the > current aspect ratio, so will change when the user switches between > landscape and portrait. However, if your application targets API level > 12 or lower, then your activity always handles this configuration > change itself (this configuration change does not restart your > activity, even when running on an Android 3.2 or higher device). Added > in API level 13.

So, in the AndroidManifest.xml file, we can put:

<activity
            android:name=".activities.role_activity.GeneralViewPagerActivity"
            android:label="@string/title_activity_general_view_pager"
            android:screenOrientation="portrait"
            android:configChanges="orientation|keyboardHidden|screenSize"
            >
        </activity> 

Solution 10 - Android

Adding <preference name="orientation" value="portrait" /> under <widget> in my config.xml worked for me.

(The other solutions either didn't work on my device, were overwritten during building or gave deprecation errors during the build process.)

Solution 11 - Android

in Manifest file which activity you want to use in "portrait" you must write these code in Activity tag

  android:screenOrientation="portrait" 

like this

         android:icon="@drawable/icon"
        android:name="com.zemkoapps.hd.wallpaper.AndroidGridLayoutActivity" 
        android:screenOrientation="portrait" >

but if u want screen in landscape use this code like this

android:screenOrientation="landscape"

Solution 12 - Android

If anyone was wondering , how you could do this for your entire application without having to make all your activities extend a common base class in Kotlin , see the example below :

class InteractiveStoryApplication: Application() {
override fun onCreate() {
    super.onCreate()
    registerActivityLifecycleCallbacks(object: ActivityLifecycleCallbacks {
        override fun onActivityCreated(activity: Activity?, savedInstanceState: Bundle?) {
            activity?.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT
        }

        override fun onActivityPaused(activity: Activity?) {
        }

        override fun onActivityResumed(activity: Activity?) {
        }

        override fun onActivityDestroyed(activity: Activity?) {
        }

        override fun onActivitySaveInstanceState(activity: Activity?, outState: Bundle?) {
        }

        override fun onActivityStarted(activity: Activity?) {
        }

        override fun onActivityStopped(activity: Activity?) {
        }
    })
}
}

and then you have to add your common base class in AndroidManifest like so:

<application android:allowBackup="true"
android:name=".InteractiveStoryApplication"

Solution 13 - Android

You can do it in two ways .

  1. Add android:screenOrientation="portrait" on your manifest file to the corresponding activity
  2. Add setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); to your activity in `onCreate() method

Solution 14 - Android

Similar to Graham Borland answer...but it seems you dont have to create Application class if you dont want...just create a Base Activity in your project

public class BaseActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_base);
    setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

}

And extend this class instead of AppCompatActivity where you want to use Potrait Mode

public class your_activity extends BaseActivity {}

Solution 15 - Android

For Xamarin Users:

If you extends all your activities to a BaseActivity Just add:

this.RequestedOrientation = ScreenOrientation.Portrait;

This will resolve the problem. If you want any particular activity to be in landscape override this in OnActivityCreated. As:

this.Activity.RequestedOrientation = ScreenOrientation.Landscape;

Solution 16 - Android

Well, I tried every answer but it didn't work in older versions of android. So, the final solution is to add this code to every activity just above setContentView:

    setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

Solution 17 - Android

In kotlin -->

Use this in your Extends Application class fun onCreate()...

registerActivityLifecycleCallbacks(object : ActivityLifecycleCallbacks {
        override fun onActivityCreated(p0: Activity, p1: Bundle?) {
            p0.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE;
        }

        override fun onActivityStarted(p0: Activity) {
        }

        override fun onActivityResumed(p0: Activity) {
        }

        override fun onActivityPaused(p0: Activity) {
        }

        override fun onActivityStopped(p0: Activity) {
        }

        override fun onActivitySaveInstanceState(p0: Activity, p1: Bundle) {
        }

        override fun onActivityDestroyed(p0: Activity) {
        }
    }

    )}

Solution 18 - Android

In your Manifest type this:

<activity
    android:screenOrientation="portrait"
    <!--- Rest of your application information ---!>
</activity>

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionnareshView Question on Stackoverflow
Solution 1 - AndroidVincent Mimoun-PratView Answer on Stackoverflow
Solution 2 - AndroidJan-Terje SørensenView Answer on Stackoverflow
Solution 3 - AndroidGraham BorlandView Answer on Stackoverflow
Solution 4 - AndroidSRamView Answer on Stackoverflow
Solution 5 - AndroidNikunj PatelView Answer on Stackoverflow
Solution 6 - AndroidDeepak SharmaView Answer on Stackoverflow
Solution 7 - AndroidZwiebelView Answer on Stackoverflow
Solution 8 - AndroidEmon Hossain MunnaView Answer on Stackoverflow
Solution 9 - Androidsuper1ha1View Answer on Stackoverflow
Solution 10 - AndroidPhilipView Answer on Stackoverflow
Solution 11 - AndroidBilal JarralView Answer on Stackoverflow
Solution 12 - AndroidAshildrView Answer on Stackoverflow
Solution 13 - AndroidSaneeshView Answer on Stackoverflow
Solution 14 - AndroidRaktim BhattacharyaView Answer on Stackoverflow
Solution 15 - AndroidNawinView Answer on Stackoverflow
Solution 16 - AndroidDev_AnayView Answer on Stackoverflow
Solution 17 - AndroidMughilView Answer on Stackoverflow
Solution 18 - AndroidTyce GatesView Answer on Stackoverflow