2017-02-12 2 views
1

Dans mon application Android, j'ai une activité qui vient à la fois en mode portrait et paysage. Voici comment faire:Comment changer l'orientation dans Android seulement quand il est activé?

Dans mon manifeste, pour l'activité que j'ai définir la méthode

android:configChanges="orientation|screenSize|locale"

et onConfigurationChanged dans mon activité

@Override 
    public void onConfigurationChanged(Configuration newConfig) { 
     super.onConfigurationChanged(newConfig); 
     //handling the change 
} 

le problème est, même lorsque l'écran de mon appareil la rotation est désactivée, l'application passe en mode paysage lorsque je l'active. Comment puis-je le dire pour écouter le mode d'écran de l'appareil?

Répondre

0

Je pense que vous pouvez essayer

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 

Dans votre manifeste, vous êtes inscrit à écouter les changements de configuration. Mais si vous ne voulez pas le mode paysage, vous pouvez essayer au-dessus de la ligne de code.

Je pense, suivant répondrait à vos besoins.

@Override 
public void onConfigurationChanged(Configuration newConfig) { 
    super.onConfigurationChanged(newConfig); 
    if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) { 
     Log.d(TAG, "Landscape"); 
     if (allowPortraitOnly) { 
      Log.d(TAG, "portrait only is allowed, changing to portrait"); 
      setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 
     } 

    } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) { 
     Log.d(TAG, "Portrait"); 
    } 
} 

Nous vérifions l'orientation du périphérique principalement au moment de l'exécution. La rotation automatique est activée dans les paramètres. Par exemple, nous voulons restreindre l'appareil uniquement en mode portrait. Avec une variable booléenne (ou autre chose comme les préférences partagées) allowPortraitOnly = valeur 'true', nous le faisons. Lorsque le périphérique passe en mode paysage, onConfigurationChanged() est invoqué et passe manuellement en mode portrait.

Veuillez noter que vous devez inclure le suivant dans le manifeste.

android:configChanges="orientation|screenSize" 
+0

Je veux le mode paysage, mais seulement quand l'utilisateur l'a autorisé – Carmine

0

vous avez besoin

android:screenOrientation="nosensor" 
android:configChanges="keyboardHidden|orientation" 

dans votre manifeste: puis passer outre onConfigurationChanged()

@Override 
public void onConfigurationChanged(Configuration newConfig) { 
    super.onConfigurationChanged(newConfig); 
//here you can handle orientation change 
} 

puis ajoutez cette ligne à onCreate() de votre activité

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 

comme répondu par @Jose.

Rappelez-vous en utilisant android:screenOrientation="nosensor" cela vous ne serez pas en mesure de gérer les changements d'orientation du tout.

+0

Mais OP veut gérer les changements d'orientation. –