212 votes

Comment régler toute l'application en mode portrait uniquement ?

Comment puis-je faire en sorte que l'application fonctionne uniquement en mode portrait ? Je veux que le mode paysage soit désactivé pendant l'exécution de l'application. Comment puis-je le faire de manière programmatique ?

306voto

MarvinLabs Points 13401

Pour toute version d'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 page application étiquette.

De Java

L'autre option est de le faire de manière programmatique, par exemple dans une Activity classe 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 un fichier personnalisé Application classe :

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

ActivityLifecycleAdapter est juste une classe d'aide que vous devrez créer et qui sera une implémentation vide de la classe ActivityLifecycleCallbacks (afin que vous ne deviez pas surcharger chacune des méthodes de cette interface lorsque vous avez simplement besoin de l'une d'entre elles).

1 votes

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

0 votes

Cela fonctionne. une dernière chose, ne mettez pas les deux instructions ci-dessus dans votre partie de codage. cela signifie qu'il active le capteur pour changer l'orientation de l'écran.

3 votes

-1 : Le demandeur a spécifiquement demandé comment le faire //programmatiquement//, et pour l'ensemble de l'application (ce qui me laisse penser qu'il ne veut pas le faire pour chaque activité individuellement).

148voto

arcone Points 3276

Oui, vous pouvez le faire à la fois par programme et pour toutes vos activités en créant une AbstractActivity 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.

4 votes

Note : Je crois que ActivityInfo.SCREEN_ORIENTATION_NOSENSOR devrait être la meilleure réponse car elle est destinée à laisser l'appareil dans l'état par défaut, certains appareils n'ayant pas d'orientation Portrait. Cependant, "nosensor" ne fonctionne PAS pour moi, donc la réponse de @arcone me convient.

111voto

Graham Borland Points 27556

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

L'astuce consiste d'abord à s'assurer que vous incluez une Application dans votre projet. Dans son onCreate() appelé lors du premier démarrage de votre application, vous enregistrez une ActivityLifecycleCallbacks (niveau 14+ de l'API) pour recevoir les notifications des événements du cycle de vie des activités.

Cela vous donne la possibilité d'exécuter votre propre code à tout moment. tout l'activité de votre application est lancée (ou arrêtée, ou reprise, ou autre). À ce stade, vous pouvez appeler setRequestedOrientation() sur 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);

            }

            ....

        });

    }
}

0 votes

Bonne solution. Je déteste juste toutes les méthodes vides qui en résultent.

10 votes

Cette réponse est la seule qui réponde à la question. Une ligne pour les gouverner toutes.

2 votes

*Une classe pour les gouverner tous.

46voto

SRam Points 973

Vous pouvez définir cela dans votre fichier manifeste .

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

et vous pouvez également réaliser la même chose en écrivant le code dans votre fichier de classe comme :

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

1 votes

@ naresh pls accepter ans si u a obtenu n'importe quelle solution selon votre besoin il courra votre évaluation aussi.

0 votes

Cette solution est vraiment facile à mettre en œuvre par rapport aux autres solutions. Elle fonctionne pour moi avec Kotlin.

25voto

Nik Patel Points 6991

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

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

28 votes

Il a dit APPLICATION et non activité.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X