web-dev-qa-db-fra.com

Forcer le mode d'orientation "portrait"

J'essaie de forcer le mode "portrait" pour mon application car mon application n'est absolument pas conçue pour le mode "paysage".

Après avoir lu certains forums, j'ai ajouté ces lignes dans mon fichier manifeste:

<application 
  Android:debuggable="true"
  Android:icon="@drawable/icon" 
  Android:label="@string/app_name"
  Android:screenOrientation="portrait">

Mais cela ne fonctionne pas sur mon appareil (HTC Desire). Il passe de "portrait" à "paysage", en ignorant les lignes du fichier manifeste.

Après avoir lu plus de forums, j'ai essayé d'ajouter ceci dans mon fichier manifeste:

<application 
  Android:debuggable="true"
  Android:icon="@drawable/icon" 
  Android:label="@string/app_name"
  Android:configChanges="orientation"       
  Android:screenOrientation="portrait">

et cette fonction dans ma classe d'activité:

public void onConfigurationChanged(Configuration newConfig)
{
    super.onConfigurationChanged(newConfig);
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}

Mais encore une fois, pas de chance.

279
thomaus

N'appliquez pas l'orientation à l'élément application, vous devez plutôt appliquer l'attribut à l'élément activité, et vous devez également définir configChanges comme indiqué ci-dessous.

Exemple:

<activity
   Android:screenOrientation="portrait"
   Android:configChanges="orientation|keyboardHidden">
</activity>

Ceci est appliqué dans le fichier manifeste AndroidManifest.xml.

509
C0deAttack

Notez que

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

est ajouté dans le fichier manifeste - où l'activité est définie.

22
NULL pointer

Je pense que Android:screenOrientation="portrait" peut être utilisé pour des activités individuelles. Utilisez donc cet attribut dans la balise <activity> comme ceci:

<activity Android:name=".<Activity Name>"
    Android:label="@string/app_name" 
    Android:screenOrientation="portrait">
   ...         
</activity>
12
Pinki

Si vous rencontrez beaucoup d'activités comme la mienne, dans votre application ou si vous ne voulez pas entrer le code de chaque balise d'activité dans le manifeste, vous pouvez le faire.

dans votre classe Application Base, vous recevrez un rappel du cycle de vie

donc, fondamentalement, ce qui se passe dans chaque activité lors de la création de la création dans Application Class est déclenché ici, c'est le code ..

public class MyApplication extends Application{

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

  registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {
            @Override
            public void onActivityCreated(Activity activity, Bundle bundle) {
                activity.setRequestedOrientation(
                        ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);


// for each activity this function is called and so it is set to portrait mode


            }

            @Override
            public void onActivityStarted(Activity activity) {

            }

            @Override
            public void onActivityResumed(Activity activity) {

            }

            @Override
            public void onActivityPaused(Activity activity) {

            }

            @Override
            public void onActivityStopped(Activity activity) {

            }

            @Override
            public void onActivitySaveInstanceState(Activity activity, Bundle bundle) {

            }

            @Override
            public void onActivityDestroyed(Activity activity) {

            }
        });
}

j'espère que ça aide.

9
Muneef M

Réglez forcer le mode Portrait ou Paysage, Ajouter des lignes, respectivement.

Importer en dessous de la ligne:

import Android.content.pm.ActivityInfo;

Ajouter la ligne ci-dessous juste au-dessus de setContentView(R.layout.activity_main);

Pour Portrait:

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);//Set Portrait

Pour Landscap:

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);//Set Landscape

Cela fonctionnera certainement.

6
Parth Patel

Selon la documentation d'Android, vous devez également souvent inclure screenSize en tant que modification possible de la configuration.

Android:configChanges="orientation|screenSize"

Si votre application cible une API de niveau 13 ou supérieur (comme indiqué par les attributs minSdkVersion et targetSdkVersion), vous devez également déclarer la configuration "screenSize", car elle change également lorsqu'un périphérique bascule entre les orientations portrait et paysage.

De même, si vous incluez tous la valeur keyboardHidden dans vos exemples, ne devriez-vous pas alors également considérer locale, mcc, fontScale, keyboard et autres ?. .

4
Martynas

J'ai eu cette ligne dans mon AndroidManifest.xml

<activity 
    Android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale"
    Android:label="@string/app_name" Android:name="Project Name"
    Android:theme="@Android:style/Theme.Black.NoTitleBar">

Ce que j'ai changé en (vient d'ajouter Android:screenOrientation="portrait")

<activity 
    Android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale"
    Android:label="@string/app_name" Android:name="Project Name"
    Android:screenOrientation="portrait"
    Android:theme="@Android:style/Theme.Black.NoTitleBar">

Cela corrige les choses pour moi.

3
Ian Jamieson

Quelque chose à compléter: j'ai récemment mis à jour une application, la précédente fonctionnait à la fois en mode paysage et portrait et je souhaitais que la version mise à jour fonctionne en mode portrait. J'ai donc ajouté

Android:screenOrientation="portrait"

à l'activité correspondante, et il vient de planter lorsque j'ai testé la mise à jour. Puis j'ai ajouté

Android:configChanges="orientation|keyboardHidden"

aussi, et ça marche.

2
user2819453

Si vous souhaitez prendre en charge différentes orientations dans les constructions debug et release, écrivez ainsi (voir https://developer.Android.com/studio/build/gradle-tips#share-properties) -with-the-manifeste ).

Dans build.gradle de votre dossier app, écrivez:

Android {
    ...
    buildTypes {
        debug {
            applicationIdSuffix '.debug'
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-Android.txt'), 'proguard-rules.pro'
            // Creates a placeholder property to use in the manifest.
            manifestPlaceholders = [orientation: "fullSensor"]
        }
        release {
            debuggable true
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-Android.txt'), 'proguard-rules.pro'
            // Creates a placeholder property to use in the manifest.
            manifestPlaceholders = [orientation: "portrait"]
        }
    }
}

Ensuite, dans AndroidManifest, vous pouvez utiliser cette variable "orientation" dans n’importe quel Activity:

<activity
    Android:name=".LoginActivity"
    Android:screenOrientation="${orientation}" />

Vous pouvez ajouter Android:configChanges:

manifestPlaceholders = [configChanges: "", orientation: "fullSensor"] en débogage et manifestPlaceholders = [configChanges: "keyboardHidden|orientation|screenSize", orientation: "portrait"] en édition,

<activity
    Android:name=".LoginActivity"
    Android:configChanges="${configChanges}"
    Android:screenOrientation="${orientation}" />
1
CoolMind

Je pense que vous voulez ajouter Android:configChanges="orientation|keyboardHidden" à votre activité? Sinon, l'activité est redémarrée sur config-change. La onConfigurationChanged ne sera pas appelée alors, mais la onCreate

1
Nanne