web-dev-qa-db-fra.com

Comment désactiver le mode paysage dans Android?

Comment désactiver le mode Paysage pour certaines vues de mon application Android?

887
lostInTransit

Ajoutez Android:screenOrientation="portrait" à l'activité du fichier AndroidManifest.xml. Par exemple:

<activity Android:name=".SomeActivity"
    Android:label="@string/app_name"
    Android:screenOrientation="portrait" />

EDIT: Depuis que cette réponse est devenue très populaire, je me sens très coupable, car forcer le portrait est rarement la bonne solution aux problèmes auxquels il est fréquemment confronté.
Les principales mises en garde concernant le portrait forcé:

  • Cela ne vous dispense pas de penser aux événements du cycle de vie d'une activité ou de sauvegarder/restaurer correctement l'état. Outre la rotation des applications, de nombreuses choses peuvent déclencher une destruction/une activité, y compris des choses inévitables comme le multitâche. Il n'y a pas de raccourci; apprendre à utiliser des bundles et retainInstance fragments.
  • Gardez à l'esprit que, contrairement à l'expérience iPhone assez uniforme, il existe certains appareils pour lesquels le mode portrait n'est pas l'orientation clairement populaire. Lorsque les utilisateurs utilisent des périphériques dotés de claviers ou de tablettes de jeu à la Nvidia Shield, sur Chromebooks , sur portables ou sur Samsung DeX , forcer portrait peut rendre votre application trop contraignante ou gênante. Si votre application ne dispose pas d'un argument UX puissant qui conduirait à une expérience négative de prise en charge d'autres orientations, vous ne devriez probablement pas forcer le paysage. Je parle de choses comme "ceci est une application de caisse enregistreuse pour un modèle spécifique de tablette toujours utilisé dans un dock matériel fixe".

La plupart des applications doivent donc laisser les capteurs, les logiciels et la configuration physique du téléphone décider eux-mêmes de la manière dont l'utilisateur souhaite interagir avec votre application. Toutefois, si vous n'êtes pas satisfait du comportement par défaut de sensor orientation dans votre cas d'utilisation, vous pouvez toujours penser à quelques cas:

  • Si votre principale préoccupation concerne les changements d'orientation accidentels à mi-activité que vous pensez que les capteurs et les logiciels de l'appareil ne fonctionneront pas bien (par exemple, dans un jeu basé sur l'inclinaison), envisagez de prendre en charge les paysages et les portraits, mais utilisez nosensor pour l'orientation. Cela force le paysage sur la plupart des tablettes et portrait sur la plupart des téléphones, mais je ne le recommanderais toujours pas pour la plupart des applications "normales" (certains utilisateurs aiment juste taper le clavier logiciel Paysage sur leur téléphone, et de nombreux utilisateurs de tablettes lisent en mode portrait - et vous devriez les laisser).
  • Si vous toujours devez forcer le portrait pour une raison quelconque, sensorPortrait peut être meilleur que portrait pour Android 2.3+; cela permet un portrait à l'envers, ce qui est assez courant dans l'utilisation d'une tablette.
1544
Yoni Samlan

Je n'avais pas connaissance du changement de fichier AndroidManifest.xml avant de lire cet article. Je l'utilise donc à la place dans mes applications:

setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);     //  Fixed Portrait orientation
102
Rich

Ajoutez ce Android:screenOrientation="portrait" dans votre fichier manifeste dans lequel vous déclarez votre activité comme ceci

<activity Android:name=".yourActivity"
    ....
    Android:screenOrientation="portrait" />

Si vous voulez utiliser le code Java, essayez

setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 

avant d'appeler la méthode setContentView pour votre activité dans onCreate().

J'espère que cette aide et facilement compréhensible pour tous ...

39
Deepak Swami

Beaucoup de réponses suggèrent d'utiliser "portrait" dans votre fichier AndroidManifest.xml. Cela peut sembler une bonne solution - mais comme indiqué dans la documentation, vous sélectionnez des périphériques qui peuvent uniquement avoir un paysage. Vous forcez également certains périphériques (qui fonctionnent le mieux en mode paysage) à se mettre en portrait, sans obtenir la bonne orientation.

Ma suggestion est d'utiliser "nosensor" à la place. Cela laissera l'appareil utiliser son orientation par défaut, ne bloquera aucun achat/téléchargement sur Google Play et garantira que le capteur ne gâche pas votre jeu (NDK, dans mon cas).

25
Mike Weir

Si vous voulez les paramètres de l'utilisateur,

alors je recommanderais setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

Vous pouvez modifier les paramètres à partir d'un menu de paramètres.

J'en ai besoin parce que mes minuteries doivent correspondre à ce qui est à l'écran, et la rotation de l'écran détruira l'activité en cours.

11
Stephen

Ajoutez juste comme cette ligne dans votre manifeste

Android: screenOrientation = "portrait"

<manifest
    package="com.example.speedtestmeter"
    Android:versionCode="1"
    Android:versionName="1.0" >

    <uses-sdk
        Android:minSdkVersion="8" />

    <application
        Android:allowBackup="true"
        Android:icon="@drawable/ic_launcher"
        Android:label="@string/app_name"
        Android:theme="@style/AppTheme" >

        <activity
            Android:name="MainActivity"
            Android:label="@string/app_name"
            Android:screenOrientation="portrait" >
            <intent-filter>
                <action Android:name="Android.intent.action.MAIN" />
                <category Android:name="Android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <activity
            Android:name="ComparisionActivity"
            Android:label="@string/app_name"
            Android:screenOrientation="portrait" >
        </activity>

        <activity
            Android:name="GaugeView"
            Android:label="@string/app_name"
            Android:screenOrientation="portrait" >
        </activity>

        <activity
            Android:name="Resultactivity"
            Android:label="@string/app_name"
            Android:screenOrientation="portrait" >
        </activity>

    </application>

</manifest>   
10
Sunil Chaudhary

Utilisez ceci dans onCreate () de l'activité

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
7
Karan Datwani

Ajoutez simplement cet attribut dans votre balise d'activité.

 Android:screenOrientation="portrait"
6
Deepak Sharma

Vous devez changer Android:screenOrientation="sensorPortrait" dans AndroidManifest.xml

6
vuhung3990

Si vous ne souhaitez pas améliorer l'ajout d'orientation dans chaque entrée d'activité manifeste, créez une classe BaseActivity (hérite de 'Activity' ou 'AppCompatActivity') qui sera héritée par chaque activité de votre application au lieu de 'Activity 'ou' AppCompatActivity 'et ajoutez simplement le code suivant dans votre BaseActivity:

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
    // rest of your code......
}
6
alchemist

Si vous souhaitez désactiver Landscape mode for your Android app (ou une seule activité), il vous suffit d'ajouter,

Android:screenOrientation="portrait" à la balise d'activité dans le fichier AndroidManifest.xml.

Comme:

_<activity Android:name="YourActivityName" 
    Android:icon="@drawable/ic_launcher" 
    Android:label="Your App Name" 
    Android:screenOrientation="portrait">
_

Autre approche, approche programmatique.

Si vous voulez le faire par programmation, par exemple. en utilisant Java code. Vous pouvez le faire en ajoutant le code ci-dessous dans la classe Java de l'activité que vous ne souhaitez pas afficher en mode paysage.

_setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
_

J'espère que cela vous aidera. Pour plus de détails, visitez ici entrez la description du lien ici

5
IntelliJ Amiya

Comment changer d'orientation dans certaines vues

Au lieu de verrouiller l'orientation de toute l'activité, vous pouvez utiliser cette classe pour verrouiller de manière pragmatique et dynamique l'orientation de n'importe quelle vue: -

Faites votre vue Paysage

OrientationUtils.lockOrientationLandscape(mActivity);

Faites votre vue Portrait

OrientationUtils.lockOrientationPortrait(mActivity);

Déverrouiller Orientation

OrientationUtils.unlockOrientation(mActivity);

Orientation Util Class

import Android.app.Activity;
import Android.content.Context;
import Android.content.pm.ActivityInfo;
import Android.content.res.Configuration;
import Android.os.Build;
import Android.view.Surface;
import Android.view.WindowManager;

/*  * This class is used to lock orientation of Android app in nay Android devices 
 */

public class OrientationUtils {
    private OrientationUtils() {
    }

    /** Locks the device window in landscape mode. */
    public static void lockOrientationLandscape(Activity activity) {
        activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE);
    }

    /** Locks the device window in portrait mode. */
    public static void lockOrientationPortrait(Activity activity) {
        activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
    }

    /** Locks the device window in actual screen mode. */
    public static void lockOrientation(Activity activity) {
        final int orientation = activity.getResources().getConfiguration().orientation;
        final int rotation = ((WindowManager) activity.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay()
                .getRotation();

        // Copied from Android docs, since we don't have these values in Froyo
        // 2.2
        int SCREEN_ORIENTATION_REVERSE_LANDSCAPE = 8;
        int SCREEN_ORIENTATION_REVERSE_PORTRAIT = 9;

        // Build.VERSION.SDK_INT <= Build.VERSION_CODES.FROYO
        if (!(Build.VERSION.SDK_INT <= Build.VERSION_CODES.FROYO)) {
            SCREEN_ORIENTATION_REVERSE_LANDSCAPE = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE;
            SCREEN_ORIENTATION_REVERSE_PORTRAIT = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT;
        }

        if (rotation == Surface.ROTATION_0 || rotation == Surface.ROTATION_90) {
            if (orientation == Configuration.ORIENTATION_PORTRAIT) {
                activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
            } else if (orientation == Configuration.ORIENTATION_LANDSCAPE) {
                activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
            }
        } else if (rotation == Surface.ROTATION_180 || rotation == Surface.ROTATION_270) {
            if (orientation == Configuration.ORIENTATION_PORTRAIT) {
                activity.setRequestedOrientation(SCREEN_ORIENTATION_REVERSE_PORTRAIT);
            } else if (orientation == Configuration.ORIENTATION_LANDSCAPE) {
                activity.setRequestedOrientation(SCREEN_ORIENTATION_REVERSE_LANDSCAPE);
            }
        }
    }

    /** Unlocks the device window in user defined screen mode. */
    public static void unlockOrientation(Activity activity) {
        activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_USER);
    }

}
5
Hitesh Sahu

Ajoutez Android:screenOrientation="portrait" à l'activité pour laquelle vous souhaitez désactiver le mode Paysage.

5
Zhenxiao Hao

Ajoutez l'extrait suivant dans votre fichier manifeste.

<activity Android:name=".yourActivity"
          ....
          Android:screenOrientation="portrait"/>

Ce supporte seulement le mode portrait

5
XYZ_deve

Si vous utilisez Xamarin C #, certaines de ces solutions ne fonctionneront pas. Voici la solution que j'ai trouvée pour fonctionner.

[Activity(MainLauncher = true, Icon = "@drawable/icon", ScreenOrientation = ScreenOrientation.Portrait)]

Au-dessus de la classe fonctionne bien, similaire aux autres solutions, également non applicable globalement et doit être placé dans chaque en-tête d'activité.

4
Derek Kelly

Vous devez définir l'orientation de chaque activité.

<activity
                Android:name="com.example.SplashScreen2"
                Android:label="@string/app_name"
                Android:screenOrientation="portrait"
                Android:theme="@Android:style/Theme.Black.NoTitleBar" >
            </activity>
            <activity
                Android:name="com.example.Registration"
                Android:label="@string/app_name"
                Android:screenOrientation="portrait"
                Android:theme="@Android:style/Theme.Black.NoTitleBar" >
            </activity>
            <activity
                Android:name="com.example.Verification"
                Android:label="@string/app_name"
                Android:screenOrientation="portrait"
                Android:theme="@Android:style/Theme.Black.NoTitleBar" >
            </activity>
            <activity
                Android:name="com.example.WelcomeAlmostDone"
                Android:label="@string/app_name"
                Android:screenOrientation="portrait"
                Android:theme="@Android:style/Theme.Black.NoTitleBar" >
            </activity>
            <activity
                Android:name="com.example.PasswordRegistration"
                Android:label="@string/app_name"
                Android:screenOrientation="portrait"
                Android:theme="@Android:style/Theme.Black.NoTitleBar" >
            </activity>
4
Akshay Paliwal

Ajoutez simplement Android:screenOrientation="portrait" à la balise d'activité dans le manifeste de l'application.

Ex:

 <activity Android:name=".ui.activities.MainActivity"
  Android:screenOrientation="portrait"></activity>
4
Ahamed Mujeeb

utilisation

Android:configChanges="keyboardHidden|orientation"
Android:screenOrientation="portrait" 
4
Swayam

Vous pouvez forcer votre activité particulière à toujours rester en mode portrait en l'écrivant dans votre fichier manifest.xml.

 <activity Android:name=".MainActivity"
        Android:screenOrientation="portrait"></activity>

Vous pouvez également forcer votre activité à rester en mode post-traitement en écrivant la ligne suivante dans la méthode onCreate () de votre activité.

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.your_layout);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

}
4
Mansuu....

ajouter une classe dans la méthode oncreate ()

 setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
4
Kumar

Vous devriez mettre ce code dans le fichier manifestes .......

    <activity Android:name=".SunderFlowersActivity"
        Android:label="@string/app_name"
        Android:screenOrientation="portrait">
        >
    </activity>
4
Tabish khan
<Android . . . >
    . . .
    <manifest . . . >
        . . .
        <application>
            <activity Android:name=".MyActivity" 
                Android:screenOrientation="portrait" 
                Android:configChanges="keyboardHidden|orientation">
            </activity>
        </application>
    </manifest>
</Android>
3
user1624253

Vous pouvez le faire pour l'ensemble de votre application sans avoir à faire en sorte que toutes vos activités étendent une classe de base commune.

L'astuce consiste d'abord à vous assurer d'inclure une sous-classe Application dans votre projet. Dans sa onCreate (), appelée lors du premier démarrage de votre application, vous enregistrez un objet ActivityLifecycleCallbacks (API de niveau 14+) pour recevoir des notifications d'événements de cycle de vie d'activité.

Cela vous donne la possibilité d'exécuter votre propre code chaque fois qu'une activité de votre application est démarrée (ou arrêtée, ou reprise, ou autre chose). À ce stade, vous pouvez appeler setRequestedOrientation () sur l'activité nouvellement créée.

Et n'oubliez pas d'ajouter app: name = ". MyApp" dans votre fichier manifeste.

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);
            }
            ....
        });
    }
}
3
Brinda Rathod

Ajoutez Android:screenOrientation="portrait" dans le fichier AndroidManifest.xml.

Par exemple:

<activity Android:name=".MapScreen" 
 Android:screenOrientation="portrait"></activity>
2
Pradeep Sodhi
 <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:Android="http://schemas.Android.com/apk/res/Android"
    package="in.co.nurture.bajajfinserv">
    <uses-permission Android:name="Android.permission.INTERNET"></uses-permission>


    <application

        Android:allowBackup="true"
        Android:icon="@mipmap/ic_launcher"
        Android:label="@string/app_name"
        Android:roundIcon="@mipmap/ic_launcher_round"
        Android:supportsRtl="true"
        Android:theme="@style/AppTheme">
        <activity Android:name=".MainActivity" Android:screenOrientation="portrait">

            <intent-filter>
                <action Android:name="Android.intent.action.MAIN" />

                <category Android:name="Android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

nous pouvons restreindre l'activité en mode portrait ou paysage à l'aide de l'attribut ou d'Android: screenOrientation.

si nous avons plus d'une activité dans mon programme, vous êtes libre de restreindre n'importe quelle activité dans n'importe quel mode et cela n'a aucun effet sur les autres que vous ne voulez pas.

2
Amit Kumar

Dans le répertoire <apphome>/platform/Android créé AndroidManifest.xml (en le copiant à partir du répertoire généré). Ajoutez ensuite Android:screenOrientation= "portrait" à TOUS les éléments d'activité.

2
user811985

Ajouter ci-dessous recommander sur votre projet,

npm installer

npm je réagis-native-orientation-locker

alors vous utilisez la classe manifeste comme, React_Native (votre dossier de projet)/Android/app/src/main/AndroidManifest.xml

<uses-permission Android:name="Android.permission.INTERNET" />
<uses-permission Android:name="Android.permission.SYSTEM_ALERT_WINDOW"/>

<application
  Android:name=".MainApplication"
  Android:label="@string/app_name"
  Android:icon="@mipmap/ic_launcher"
  Android:allowBackup="false"
  Android:theme="@style/AppTheme">
  <activity
    Android:name=".MainActivity"
    Android:label="@string/app_name"
    Android:screenOrientation="landscape"
    Android:configChanges="keyboard|keyboardHidden|orientation|screenSize"
    Android:windowSoftInputMode="adjustResize">
    <intent-filter>
        <action Android:name="Android.intent.action.MAIN" />
        <category Android:name="Android.intent.category.LAUNCHER" />
    </intent-filter>
  </activity>
  <activity Android:name="com.facebook.react.devsupport.DevSettingsActivity" />
</application>

Merci!

2
shanmuga Rajan

Cela a fonctionné pour moi, essayez d'ajouter ce code dans le fichier AndroidManifest

<application
        Android:allowBackup="true"
        Android:icon="@mipmap/ic_launcher"
        Android:label="@string/app_name"
        Android:roundIcon="@mipmap/ic_launcher_round"
        Android:supportsRtl="true"
        Android:screenOrientation="portrait"
        Android:theme="@style/AppTheme">
        ....
        ....
        </application>
1
Arvina Kori

Soit en classe manifeste.

<activity Android:name=".yourActivity"
    ....
    Android:screenOrientation="portrait" />

ou par programmation

setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 

Remarque: vous devriez appeler cela avant la méthode setContentView pour votre activité dans onCreate().

1
Khemraj

En kotlin, on peut atteindre le même programme de la manière suivante:

requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT
1
osleonard

Dans l’espoir d’aider quelqu'un d’autre, il ne manque plus que l’attribut suivant: ACTIVITY dans AndroidManifest.xml:

Android: configChanges = "orientation"

Donc, noeud d'activité complet:

<activity Android:name="Activity1" 
    Android:icon="@drawable/icon" 
    Android:label="App Name" 
    Android:configChanges="orientation">
0
Ben

si votre activité est liée au premier état d'orientation du périphérique, obtenez l'orientation actuelle du périphérique dans la méthode onCreate, puis corrigez-la pour toujours:

        int deviceRotation = ((WindowManager) getBaseContext().getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay().getOrientation();

        if(deviceRotation == Surface.ROTATION_0) {
            setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
        }
        else if(deviceRotation == Surface.ROTATION_180)
        {
            setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT);
        }
        else if(deviceRotation == Surface.ROTATION_90)
        {
            setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
        }
        else if(deviceRotation == Surface.ROTATION_270)
        {
            setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE);
        }
0
Hamid