Désactiver et activer les changements d'orientation dans une activité dans Android par programmation
J'ai une Appli qui font un peu de fond de personnel. Lorsque le travail de fond est en cours d'exécution un Cercle de progression est affichée, si l'appareil est mis en rotation pendant ce temps, alors que l'Activité est "reset" et je veux éviter que.
Pour cette raison que j'ai décidé de désactiver l'orientation au cours de ce processus. J'ai vu des differends fils, pour cette question, mais aucun avec une solution valide, au moins dans mon cas.
Les solutions sont affichées sur la réparation de l'activité de l'orientation, mais vous avez à traiter avec le fait que l'INVERSE orientations ne sont pas retournés si vous utilisez:
getResources().getConfiguration().orientation
La fonction ci-dessus renvoie SCREEN_ORIENTATION_PORTRAIT à la fois pour le PORTRAIT et REVERSE_PORTRAIT cas (au moins dans mes tests).
Donc à la fin j'ai utilisé la valeur de Rotation pour faire face à cela, donc mon code "désactiver la rotation" est:
int rotation = getWindowManager().getDefaultDisplay().getRotation();
switch(rotation) {
case Surface.ROTATION_180:
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT);
break;
case Surface.ROTATION_270:
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE);
break;
case Surface.ROTATION_0:
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
break;
case Surface.ROTATION_90:
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
break;
}
Et de permettre à nouveau l'orientation:
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);
Qui fonctionne parfaitement dans un appareil avec Android 4.1.2, mais dans un Appareil avec Android 4.2.1 il ne fonctionne pas comme prévu.
Je suppose que la gestion de la rotation de l'activité en direct cycle doit être une question commune mais je n'ai pas été en mesure de trouver une solution adaptée. Peut-être que je suis à la recherche pour le mauvais sens, donc toute aide est vraiment la bienvenue.
Merci d'avance,
Ivan.
Screen.lockOrientation(this)
à partir de github.com/delight-im/Android-BaseLib/blob/master/Source/src/im/...OriginalL'auteur Ivan BASART | 2013-11-16
Vous devez vous connecter pour publier un commentaire.
Si vous souhaitez désactiver les changements d'orientation du téléphone, puis vous pouvez utiliser ce code dans le manifeste
//si vous voulez que votre écran en mode portrait
//si vous voulez vous écran en mode paysage
et si vous voulez que votre téléphone pour changer d'orientation, mais aussi d'empêcher le processus de redémarrer ensuite, vous pouvez utiliser le onConfigurationChanged méthode dans votre classe:
onConfigurationChanged()
appel, je reçois unSuperNotCalledException
qui bloque l'application de l'API (23).OriginalL'auteur ashfak
Essayer..
Il n'y a pas de mal dans votre code. C'est exact, je l'ai vérifié. Utilisez ce code dans
onConfigurationChanged
qui peuvent faire la différence et une autre chose est l'utilisation de code ci-dessous pour désactiver l'activité de réinitialisation.OriginalL'auteur Hariharan
Vous pourriez remplacer le onConfiguratoinChanged méthode pour désactiver les changements d'orientation de l':
N'oubliez pas d'activer l'orientation changé écouteur dans votre AndroidManifest.xml fichier:
OriginalL'auteur benestar
Simple: une ligne à ajouter après le Nom de l'Activité dans le manifeste android
Cela a fonctionné pour moi.
OriginalL'auteur Deep Dave