Comment configurer toute l'application en mode portrait uniquement?


201

Comment le configurer pour que l'application s'exécute en mode portrait uniquement? Je souhaite que le mode paysage soit désactivé pendant l'exécution de l'application. Comment le faire par programme?

Réponses:


293

Pour toute version Android

De XML

Vous pouvez spécifier android:screenOrientation="portrait"pour chaque activité dans votre fichier manifest.xml. Vous ne pouvez pas spécifier cette option sur la applicationbalise.

Depuis Java

Une autre option est de le faire par programme, par exemple dans une Activityclasse de base:

@Override
public void onCreate(Bundle savedInstanceState) {
  setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}

Pour Android 4+ (API 14+)

La dernière option est de le faire avec des écouteurs de cycle de vie d'activité qui ne sont disponibles que depuis Android 4.0 (API 14+). Tout se passe dans une Applicationclasse personnalisée :

@Override
public void onCreate() {
    super.onCreate();  
    registerActivityLifecycleCallbacks(new ActivityLifecycleAdapter() {
        @Override
        public void onActivityCreated(Activity a, Bundle savedInstanceState) {
            a.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
        }
    });
}

ActivityLifecycleAdapterest juste une classe auxiliaire que vous devrez créer et qui sera une implémentation vide de ActivityLifecycleCallbacks(vous n'avez donc pas à remplacer toutes les méthodes de cette interface lorsque vous en avez simplement besoin).


1
ça ne marche pas. il passe en mode paysage lorsque je tourne l'appareil. et plus de chose dans le code que j'utilise ces setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_NOSENSOR); setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_SENSOR); instructions pour la barre de progression. y a-t-il un problème avec ces instructions?
naresh

ça marche. une dernière chose ne mettez pas au-dessus de deux instructions dans votre partie codage. cela signifie qu'il permet au capteur de changer l'orientation de l'écran.
naresh

3
-1: Le demandeur a spécifiquement demandé comment le faire // par programme //, et pour l'ensemble de l'application (ce qui m'amène à croire qu'ils ne veulent pas le faire pour chaque activité individuellement).
jwir3

@ jwir3, je ne suis pas d'accord. la "programmation" ne consiste pas seulement à écrire du code, c'est aussi tous les méta-fichiers, les ressources que vous utilisez, contourner les idiosyncrasies de l'IDE, etc. C'est une bonne réponse, corrige le problème et l'OP l'a marqué comme correct apparemment une réponse suffisante à la question d'origine.
James Webster

9
en utilisant la méthode LifeCycleCallbacks, vous aurez un retard dans les lancements d'activité lorsque vous maintenez votre appareil en mode paysage (ce qui serait normalement). Je suppose que c'est parce que les appareils reviennent brièvement en mode paysage entre les activités et ont besoin de temps pour gérer cela. La définition de l'orientation dans le manifeste n'a pas cet effet.
Anonyme

142

Oui, vous pouvez le faire à la fois par programme et pour toutes vos activités en créant une activité abstraite que toutes vos activités étendent.

public abstract class AbstractActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
    }
}

Cette activité abstraite peut également être utilisée pour un menu global.


3
Remarque: Je pense que cela ActivityInfo.SCREEN_ORIENTATION_NOSENSORdevrait être la meilleure réponse car il est destiné à laisser l'appareil dans l'état par défaut car certains appareils n'ont pas d'orientation Portrait. Cependant, «nosensor» ne fonctionne PAS pour moi, donc la réponse de @ arcone me correspond.
David Manpearl

104

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 Applicationsous-classe dans votre projet. Dans son onCreate(), appelé lors du premier démarrage de votre application, vous enregistrez un ActivityLifecycleCallbacksobjet (niveau API 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é dans votre application est démarrée (ou arrêtée, ou reprise, ou autre). À ce stade, vous pouvez faire appel setRequestedOrientation()à l'activité nouvellement créée.

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

            }

            ....

        });

    }
}

9
c'est la seule réponse qui répond à la question. Une ligne pour les gouverner tous.
Samuel

2
* Une classe pour les gouverner tous.
Jay Mayu

3
et n'oubliez jamais d'ajouter une racine d'application manifeste. android: name = ". MyApp"
Faisal Naseer

2
Cette approche appelle deux fois onCreate () de l'activité.
Sandeep R

3
Le problème est que lorsque vous tenez l'appareil horizontalement et commencez une nouvelle activité, il apparaît en orientation paysage puis tourne en mode portrait. Il semble que le seul bon moyen de verrouiller l'application complète en orientation portrait soit de marquer chaque activité dans Manifest.
Den

42

Vous pouvez définir cela dans votre fichier manifeste.

android:name=".your launching activity name"
android:screenOrientation="portrait"

et vous pouvez également y parvenir en écrivant le code dans votre fichier de classe comme:

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

1
@ naresh pls accepte ans si vous avez une solution selon vos besoins, elle augmentera également votre note
SRam

24

Ajoutez android: screenOrientation = "portrait" à l'activité dans AndroidManifest.xml. Par exemple:

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

25
Il a dit que l'APPLICATION n'était pas une activité.
Reinherd

10

Utilisation:

android:screenOrientation="portrait" 

Écrivez simplement cette ligne dans le fichier manifeste de votre application dans chaque activité que vous souhaitez afficher en mode portrait uniquement.


8

Écrivez ceci dans votre fichier manifeste, pour chaque activité:

android:screenOrientation="portrait" 

2

À partir du guide du développeur Android:

"orientation" L'orientation de l'écran a changé - l'utilisateur a fait pivoter l'appareil. Remarque: Si votre application cible l'API de niveau 13 ou supérieur (comme déclaré par les attributs minSdkVersion et targetSdkVersion), vous devez également déclarer la configuration "screenSize", car elle change également lorsqu'un appareil bascule entre les orientations portrait et paysage.

"screenSize" La taille d'écran actuellement disponible a changé. Cela représente un changement dans la taille actuellement disponible, par rapport au rapport d'aspect actuel, donc changera lorsque l'utilisateur bascule entre paysage et portrait. Cependant, si votre application cible l'API de niveau 12 ou inférieur, votre activité gère toujours cette modification de configuration elle-même (cette modification de configuration ne redémarre pas votre activité, même lorsqu'elle s'exécute sur un appareil Android 3.2 ou supérieur). Ajouté au niveau API 13.

Ainsi, dans le fichier AndroidManifest.xml, nous pouvons mettre:

<activity
            android:name=".activities.role_activity.GeneralViewPagerActivity"
            android:label="@string/title_activity_general_view_pager"
            android:screenOrientation="portrait"
            android:configChanges="orientation|keyboardHidden|screenSize"
            >
        </activity> 

1

L'ajout de <preference name="orientation" value="portrait" />sous <widget>dans mon config.xml a fonctionné pour moi.

(Les autres solutions n'ont pas fonctionné sur mon appareil, ont été écrasées pendant la construction ou ont donné des erreurs de dépréciation pendant le processus de construction.)


Où se trouve ledit config.xml? De quelle plateforme de développement parlez-vous?
Tash Pemhiwa

1

dans le fichier manifeste quelle activité vous souhaitez utiliser dans "portrait", vous devez écrire ce code dans la balise d'activité

  android:screenOrientation="portrait" 

comme ça

         android:icon="@drawable/icon"
        android:name="com.zemkoapps.hd.wallpaper.AndroidGridLayoutActivity" 
        android:screenOrientation="portrait" >

mais si vous voulez un écran en paysage, utilisez ce code comme celui-ci

android:screenOrientation="landscape"

1
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);


    //setting screen orientation locked so it will be acting as potrait
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LOCKED);
}

0

Si quelqu'un se demandait comment faire cela pour l'ensemble de votre application sans avoir à faire en sorte que toutes vos activités étendent une classe de base commune dans Kotlin , consultez l'exemple ci-dessous:

class InteractiveStoryApplication: Application() {
override fun onCreate() {
    super.onCreate()
    registerActivityLifecycleCallbacks(object: ActivityLifecycleCallbacks {
        override fun onActivityCreated(activity: Activity?, savedInstanceState: Bundle?) {
            activity?.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT
        }

        override fun onActivityPaused(activity: Activity?) {
        }

        override fun onActivityResumed(activity: Activity?) {
        }

        override fun onActivityDestroyed(activity: Activity?) {
        }

        override fun onActivitySaveInstanceState(activity: Activity?, outState: Bundle?) {
        }

        override fun onActivityStarted(activity: Activity?) {
        }

        override fun onActivityStopped(activity: Activity?) {
        }
    })
}
}

puis vous devez ajouter votre classe de base commune dans AndroidManifest comme ceci:

<application android:allowBackup="true"
android:name=".InteractiveStoryApplication"

0

Vous pouvez le faire de deux manières.

  1. Ajoutez android:screenOrientation="portrait"votre fichier manifeste à l'activité correspondante
  2. Ajoutez setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); à votre activité dans la méthode `onCreate ()

0

Semblable à la réponse de Graham Borland ... mais il semble que vous n'ayez pas à créer de classe d'application si vous ne voulez pas ... créez simplement une activité de base dans votre projet

public class BaseActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_base);
    setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

}

Et étendez cette classe au lieu d'AppCompatActivity où vous souhaitez utiliser le mode Potrait

public class your_activity extends BaseActivity {}

0

Pour les utilisateurs de Xamarin:

Si vous étendez toutes vos activités à un BaseActivitysimple ajout:

this.RequestedOrientation = ScreenOrientation.Portrait;

Cela résoudra le problème. Si vous souhaitez qu'une activité particulière soit en paysage, remplacez-la OnActivityCreated. Comme:

this.Activity.RequestedOrientation = ScreenOrientation.Landscape;

-11

Dans votre manifeste, tapez ceci:

<activity
    android:screenOrientation="portrait"
    <!--- Rest of your application information ---!>
</activity>

6
Cela n'ajoute rien de nouveau que les réponses de 3 ans n'ont pas déjà dit. Vous pourriez envisager de le supprimer. Si vous décidez de modifier votre réponse pour inclure plus d'informations qui la distinguent des autres, veuillez @reply me.
Artjom B.

1
android: screenOrientation = "portrait" ne peut pas être ajouté au tag d'application, il doit aller à l'intérieur du tag d'activité
Hossein Amini
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.