web-dev-qa-db-fra.com

Empêcher la rotation de l'écran sur Android

J'aimerais empêcher une rotation de l'une de mes activités car je commence une tâche asynchrone et la rotation de l'écran la fait redémarrer.

Y a-t-il un moyen de dire à cette activité "NE TOURNEZ PAS l'écran même si l'utilisateur secoue son téléphone comme un fou"?

300
Sephy

Ajouter

Android:screenOrientation="portrait" 

ou

 Android:screenOrientation="landscape" 

dans le <activity> élément/s du manifeste et vous avez terminé.

439
lbedogni

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

  1. Enregistrez l'orientation de votre écran actuel dans votre activité à l'aide de getRequestedOrientation() .
  2. Désactivez l'orientation automatique de l'écran à l'aide de setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR) .
  3. Exécutez/exécutez votre AsyncTask.
  4. À la fin de votre AsyncTask, restaurez votre statut d'orientation précédent à l'aide de setRequestedOrientation(oldOrientation) .

Veuillez noter qu'il existe plusieurs façons d'accéder aux propriétés Activity (qui s'exécute sur le thread d'interface utilisateur) à l'intérieur d'un AsyncTask. Vous pouvez implémenter votre AsyncTask en tant que classe interne ou vous pouvez utiliser le message Handler qui envoie votre classe Activiy.

124
Emre Yazici

Dans votre fichier Manifest, pour chaque activité pour laquelle vous souhaitez verrouiller la rotation de l'écran, ajoutez: si vous souhaitez le verrouiller en mode horizontal:

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

ou si vous voulez le verrouiller en mode vertical:

<activity
            ...
            ...
            Android:screenOrientation="portrait">
26
Sara

Le moyen le plus simple que j’ai trouvé était de mettre

this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

dans onCreate, 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);
}
23
Paul Alexander

Plutôt que d'entrer dans le Manifeste Android, vous pouvez simplement faire ceci:

screenOrientation = getResources().getConfiguration().orientation;
getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LOCKED);
... AsyncTask

screenOrientation = getResources().getConfiguration().orientation;


@Override
protected void onPostExecute(String things) {
    context.setRequestedOrientation(PlayListFragment.screenOrientation);
    or 
    context.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_FULL_SENSOR);
}

Le seul inconvénient ici est que cela nécessite une API de niveau 18 ou supérieur. Donc, fondamentalement, ceci est la pointe de la lance.

5

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>
5
Li Che

L'attribut suivant sur ACTIVITY dans AndroidManifest.xml est tout ce dont vous avez besoin:

Android:configChanges="orientation"

Ainsi, le nœud d'activité complet serait:

<activity Android:name="Activity1"
          Android:icon="@drawable/icon"
          Android:label="App Name"
          Android:excludeFromRecents="true"
          Android:configChanges="orientation">
    <intent-filter>
        <action Android:name="Android.intent.action.MAIN"/>
        <category Android:name="Android.intent.category.LAUNCHER"/>
    </intent-filter>
</activity>
2
Ben

Ajoutez ce qui suit à votre AndroidManifest.xml

[app> src> main> AndroidManifest.xml]

<activity Android:name=".MainActivity"
          Android:configChanges="orientation"
          Android:screenOrientation="portrait"/>

Exemple:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:Android="http://schemas.Android.com/apk/res/Android"
package="xxx.zzzzzz.yyyyy">

   <uses-permission Android:name="A-PERMISSION" />

   <application>
      <activity Android:name=".MainActivity"
                Android:screenOrientation="portrait"
                Android:configChanges="orientation">
      </activity>
   </application>

</manifest>
1
andrewoodleyjr

Ajouter:

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR);
        ...
        ...
        ...
}
1
Anas

Si vous utilisez Outils de développement Android (ADT) et Eclipse , vous pouvez accéder à votre AndroidManifest.xml -> Application onglet -> descendez et sélectionnez votre activité. Enfin, sélectionnez votre orientation préférée. Vous pouvez sélectionner l'une des nombreuses options.

0
Husam

Utilisez AsyncTaskLoader pour protéger vos données même si l'activité change, au lieu d'utiliser AsyncTask, il s'agit d'un meilleur moyen de créer des applications que d'empêcher la rotation de l'écran.

0
Bbake Waikhom

Vous devez ajouter le code suivant dans le fichier manifest.xml. L'activité pour laquelle il ne doit pas être en rotation, dans cette activité, ajoutez cet élément

Android:screenOrientation="portrait"

Ensuite, il ne tournera pas.

0
Simon Chius

Empêcher la rotation de l'écran, ajoutez simplement la ligne suivante dans vos manifestes.

<activity
        Android:name=".YourActivity"
        Android:screenOrientation="portrait" />

Cela fonctionne pour moi.

0
DEVSHK

Vous pouvez essayer de cette façon

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:Android="http://schemas.Android.com/apk/res/Android"
package="com.itclanbd.spaceusers">

<uses-permission Android:name="Android.permission.INTERNET" />
<uses-permission Android:name="Android.permission.ACCESS_NETWORK_STATE"/>
<application
    Android:allowBackup="true"
    Android:icon="@mipmap/ic_launcher"
    Android:label="@string/app_name"
    Android:roundIcon="@mipmap/ic_launcher_round"
    Android:supportsRtl="true"
    Android:theme="@style/AppTheme">
    <activity Android:name=".Login_Activity"
        Android:screenOrientation="portrait">
        <intent-filter>
            <action Android:name="Android.intent.action.MAIN" />

            <category Android:name="Android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>
0