Je souhaite que mon application Android soit exécutée uniquement en mode portrait?

359

Je souhaite que mon application Android soit exécutée uniquement en mode portrait? Comment puis je faire ça?

James
la source

Réponses:

779

Dans le manifeste, définissez ceci pour toutes vos activités:

<activity android:name=".YourActivity"
    android:configChanges="orientation"
    android:screenOrientation="portrait"/>

Laisse-moi expliquer:

  • Avec android:configChanges="orientation"vous dites à Android que vous serez responsable des changements d'orientation.
  • android:screenOrientation="portrait" vous définissez le mode d'orientation par défaut.
Cristian
la source
50
Ce ne serait pas génial si nous pouvions définir une orientation "globale" pour TOUTES les activités dans l'application? On dirait que nous n'avons pas d'autre choix que de copier / coller l'attribut "portrait" sur chaque activité ...
Eduardo Coelho
63
Il suffit de jeuandroid:screenOrientation="portrait"
Jusqu'au
11
@EduardoCoelho, vous pouvez réellement créer une classe de base PortraitActivityet lors de l'appel onCreate setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT)Toutes les activités prolongeant cela ne tourneront pas
Twinone
1
@Twinone: Que diriez-vous quand différentes activités veulent hériter de différentes sous-classes de Activity, comme une activité s'étend de ListActivitytandis que d'autres s'étendent simplement de Activity?
RestInPeace
3
@RestInPeace Oui, bon point. Mais ce n'est pas mon idée de se tromper, c'est juste que Java ne prend pas en charge l'héritage multiple :)
Twinone
57

Dans Android File Manifest, mettez votre attribut pour <activity>queandroid:screenOrientation="portrait"

Praveen
la source
2
permettez-moi d'ajouter: à partir d'Android Sudio 3.6, vous devez utiliser android: screenOrientation = "fullSensor" ou android: screenOrientation = "non spécifié". fullSensor Signifie que vous avez activé la fonction "Rotation désactivée" ou non, cela changera l'orientation en fonction du déplacement du téléphone. non spécifié Signifie que si vous avez activé la fonction Rotation désactivée, elle restera uniquement dans cette orientation et sinon, elle modifiera l'orientation en fonction du déplacement du téléphone.
Kirguduck
24

Il y a deux façons,

  1. Ajouter android:screenOrientation="portrait"pour chaque activité dans le fichier manifeste
  2. Ajoutez this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);chaque fichier java.
Solution de code Android
la source
14
La deuxième option a pour effet secondaire horrible de redémarrer votre activité une fois démarrée dans Portrait.
Joakim
4

dans le manifeste:

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

ou: dans la MainActivity

@SuppressLint("SourceLockedOrientationActivity")
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
Meysam Keshvari
la source
Je comprends app/src/main/AndroidManifest.xml; lineNumber: 20; columnNumber: 50; The prefix "tools" for attribute "tools:ignore" associated with an element type "activity" is not bound.. L'ajout xmlns:tools="http://schemas.android.com/tools"de l'élément racine résout le problème
Żabojad
3

Ancien poste, je sais. Afin d'exécuter votre application toujours en mode portrait, même lorsque l'orientation peut être ou est inversée, etc. (par exemple sur les tablettes), j'ai conçu cette fonction qui est utilisée pour définir l'appareil dans la bonne orientation sans avoir besoin de savoir comment le portrait et le paysage les fonctionnalités sont organisées sur l'appareil.

   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); }

    }

Fonctionne comme un charme!

AVIS: Modifiez this.activitypar votre activité ou ajoutez-le à l'activité principale et supprimez this.activity;-)

Codebeat
la source
-5

j'utilise

 android:screenOrientation="nosensor"

Il est utile si vous ne souhaitez pas prendre en charge le mode portrait à l'envers.

user2305886
la source
si cela fait ce que je pense, cela ne force pas vraiment l'écran au portrait, ce que vous voudrez peut-être faire.
Lassi Kinnunen
pourquoi ne pas simplement supprimer ce commentaire! cela n'a pas de sens
Alexander Zaldostanov
Dans le fichier manifeste Android, ajoutez simplement un attribut pour votre <activité> cet android: screenOrientation = "portrait"
Avinash Shinde
Merci pour votre réponse, cela m'est utile.
Md. Shofiulla