Reputation: 14121
I want my android application to be only run in portrait mode? How can I do that?
Upvotes: 432
Views: 322711
Reputation: 5141
Alternative solution is to set activity's orientation using ActivityLifecycleCallbacks
.
import android.app.Activity
import android.app.Application
import android.content.pm.ActivityInfo
import android.os.Bundle
class App : Application() {
override fun onCreate() {
super.onCreate()
registerActivityLifecycleCallbacks(object : ActivityLifecycleCallbacks {
override fun onActivityCreated(activity: Activity, savedInstanceState: Bundle?) {
activity.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT
}
override fun onActivityStarted(activity: Activity) {}
override fun onActivityResumed(activity: Activity) {}
override fun onActivityPaused(activity: Activity) {}
override fun onActivityStopped(activity: Activity) {}
override fun onActivitySaveInstanceState(activity: Activity, savedInstanceState: Bundle) {}
override fun onActivityDestroyed(activity: Activity) {}
})
}
}
Upvotes: 4
Reputation: 1332
The accepted answer is correct. However, if you happen to be doing cross-platform development in C# using Uno Platform the Activity configuration is defined in an Activity attribute in the class. I'd expect this is the same if you're doing Xamarin or Xamarin Forms development.
Set: ScreenOrientation = ScreenOrientation.Portrait in the attribute parameters.
Here's an example within my MainActivity.cs class-level attribute:
[Activity(MainLauncher = true,
ConfigurationChanges = global::Uno.UI.ActivityHelper.AllConfigChanges,
WindowSoftInputMode = SoftInput.AdjustPan | SoftInput.StateHidden,
ScreenOrientation = ScreenOrientation.Portrait)]
public class MainActivity : Windows.UI.Xaml.ApplicationActivity { }
#unoplatform #xamarin #csharp #windows #crossplatform
Upvotes: 0
Reputation: 7220
in new SDk
of android (24 and above)
you can use in Manifest.xml
in activity
tag as you want:
<activity
android:name=".feature.main.MainActivity"
********* android:screenOrientation="locked" ******
android:configChanges="uiMode"
android:windowSoftInputMode="adjustPan"
android:exported="true">
and it work!
Upvotes: 1
Reputation: 11
Try this: (if SDK 23 & above)
Add your AndroidManifest.xlm
;
<activity android:name=".YourActivity"
android:screenOrientation="locked"/>
like this.
Upvotes: 1
Reputation: 1201
in the manifest:
<activity android:name=".activity.MainActivity"
android:screenOrientation="portrait"
tools:ignore="LockedOrientationActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
or : in the MainActivity
@SuppressLint("SourceLockedOrientationActivity")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
Upvotes: 16
Reputation: 323
There are two ways,
android:screenOrientation="portrait"
for each Activity in Manifest Filethis.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
in each java file.Upvotes: 30
Reputation: 6610
Old post I know. In order to run your app always in portrait mode even when orientation may be or is swapped etc (for example on tablets) I designed this function that is used to set the device in the right orientation without the need to know how the portrait and landscape features are organised on the device.
private void initActivityScreenOrientPortrait()
{
// Avoid screen rotations (use the manifests android:screenOrientation setting)
// Set this to nosensor or potrait
// Set window fullscreen
this.activity.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
DisplayMetrics metrics = new DisplayMetrics();
this.activity.getWindowManager().getDefaultDisplay().getMetrics(metrics);
// Test if it is VISUAL in portrait mode by simply checking it's size
boolean bIsVisualPortrait = ( metrics.heightPixels >= metrics.widthPixels );
if( !bIsVisualPortrait )
{
// Swap the orientation to match the VISUAL portrait mode
if( this.activity.getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT )
{ this.activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); }
else { this.activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT ); }
}
else { this.activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR); }
}
Works like a charm!
NOTICE:
Change this.activity
by your activity or add it to the main activity and remove this.activity
;-)
Upvotes: 4
Reputation: 786
I use
android:screenOrientation="nosensor"
It is helpful if you do not want to support up side down portrait mode.
Upvotes: -6
Reputation: 91205
In Android Manifest File, put attribute for your <activity>
that android:screenOrientation="portrait"
Upvotes: 71
Reputation: 200170
In the manifest, set this for all your activities:
<activity android:name=".YourActivity"
android:configChanges="orientation"
android:screenOrientation="portrait"/>
Let me explain:
android:configChanges="orientation"
you tell Android that you will be responsible of the changes of orientation.android:screenOrientation="portrait"
you set the default orientation mode.Upvotes: 905