357 votes

empêcher la rotation de l'écran android

J'ai une de mes activités que je voudrais empêcher de tourner parce que je lance un AsyncTask, et la rotation de l'écran le fait redémarrer. Donc, y a-t-il un moyen de dire à cette activité "NE TOURNE PAS l'écran même si l'utilisateur secoue son téléphone comme un fou"?

532voto

lbedogni Points 2771

Ajoutez android:screenOrientation="portrait" à l'élément dans le manifeste ou le paysage et vous avez terminé.

133voto

Emre Yazıcı Points 5413

Vous pouvez suivre la logique ci-dessous pour empêcher la rotation automatique de l'écran tandis que votre AsyncTask est en cours d'exécution:

  1. Magasin de votre orientation de l'écran à l'intérieur de votre activité à l'aide de getRequestedOrientation().
  2. Désactiver automatiquement l'orientation de l'écran à l'aide de setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR).
  3. Exécuter/exécuter votre AsyncTask.
  4. À la fin de votre AsyncTask restaurer votre précédente d'orientation à l'aide de setRequestedOrientation(oldOrientation).

Veuillez noter qu'il existe plusieurs façons d'accéder Activity (qui s'exécute sur le thread de l'INTERFACE utilisateur), les propriétés à l'intérieur d'un AsyncTask. Vous pouvez mettre en œuvre votre AsyncTask intérieur de la classe ou vous pouvez utiliser le message d' Handler que de passer votre Activiy classe.

36voto

cbrook Points 301

La façon la plus simple de le faire était de mettre this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
au sein deCréer, juste après
setContentView(R.layout.activity_main);

alors...

  @Override
    protected void onCreate(Bundle savedInstanceState) {

          super.onCreate(savedInstanceState);
          setContentView(R.layout.activity_main);
          this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);


}
 

28voto

Sara Points 136

Dans votre manifeste: pour chaque activité que vous souhaitez arrêter l'écran, ajoutez simplement:

 <activity
        ...
        ...
        android:screenOrientation="landscape">
 

si vous souhaitez le verrouiller en mode horizontal ou le code ci-dessous si vous souhaitez le verrouiller en mode vertical:

 <activity
            ...
            ...
            android:screenOrientation="portrait">
 

6voto

Li Che Points 321

Activity.java

 @Override     
 public void onConfigurationChanged(Configuration newConfig) {       
        try {     
            super.onConfigurationChanged(newConfig);      
            if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {      
                // land      
            } else if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {      
               // port       
            }    
        } catch (Exception ex) {       
     }   
 

AndroidManifest.xml

  <application android:icon="@drawable/icon" android:label="@string/app_name">
  <activity android:name="QRCodeActivity" android:label="@string/app_name"
  android:screenOrientation="landscape" >
   <intent-filter>
    <action android:name="android.intent.action.MAIN" />
    <category android:name="android.intent.category.LAUNCHER" />
   </intent-filter>
  </activity>

 </application>
 

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