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?

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.

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"


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.

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

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


-5

j'utilise

 android:screenOrientation="nosensor"

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


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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.