Empêcher la rotation de l'écran sur Android
J'ai une de mes activités que je voudrais empêcher de tourner parce que je démarre une AsyncTask, et la rotation de l'écran le fait redémarrer.
Existe-t-il un moyen de dire à cette activité "ne pas faire pivoter l'écran même si l'utilisateur secoue son téléphone comme un fou"?
13 réponses
Ajouter
android:screenOrientation="portrait"
Ou
android:screenOrientation="landscape"
Au (x) élément (s) <activity>
dans
le manifeste et vous avez terminé.
, Vous pouvez suivre la logique ci-dessous pour empêcher la rotation automatique de l'écran tout votre AsyncTask
est en cours d'exécution:
- stockez votre orientation d'écran actuelle dans votre activité en utilisant
getRequestedOrientation()
. - désactiver l'orientation automatique de l'écran en utilisant
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR)
. - exécutez / exécutez votre
AsyncTask
. - à la fin de votre
AsyncTask
restaurez votre statut d'orientation précédent en utilisantsetRequestedOrientation(oldOrientation)
.
, Veuillez noter qu'il existe plusieurs façons d'accéder Activity
(qui s'exécute sur le thread de L'interface utilisateur) propriétés à l'intérieur d'un AsyncTask
. Vous pouvez implémenter votre AsyncTask
en tant que classe interne ou vous pouvez utiliser message Handler
cela pousse votre classe Activiy
.
Dans le fichier de Manifeste, pour chaque Activité que vous souhaitez verrouiller la rotation de l'écran ajouter: si vous souhaitez verrouiller en mode horizontal:
<activity
...
...
android:screenOrientation="landscape">
, Ou si vous voulez verrouiller en mode vertical:
<activity
...
...
android:screenOrientation="portrait">
Le moyen le plus simple que j'ai trouvé pour le faire était de mettre
this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
Dans onCreate, juste après
setContentView(R.layout.activity_main);
Donc...
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
De l'Activité.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>
Plutôt que d'aller dans L'AndroidManifest, 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 qu'il nécessite un niveau D'API 18 ou supérieur. Donc, fondamentalement, c'est la pointe de la lance.
L'attribut suivant sur L'activité 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>
Ajouter:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR);
...
...
...
}
Si vous utilisez Android Developer Tools (ADT) et de Eclipse vous pouvez aller à 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.
, Vous devez ajouter le code suivant dans le manifeste.fichier xml. L'activité pour laquelle il ne doit pas tourner, dans cette activité ajouter cet élément
android:screenOrientation="portrait"
Alors il ne tournera pas.
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>
Ajoutez ce qui suit à votre AndroidManifest.xml
[ app > src > principal > 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>
Utilisez AsyncTaskLoader pour protéger vos données même si l'activité change, au lieu d'utiliser AsyncTask c'est une meilleure façon de créer des applications que d'empêcher la rotation de l'écran.