Je viens de mettre en œuvre une fonction de changement d'orientation - par exemple lorsque la mise en page passe du portrait au paysage (ou vice versa). Comment puis-je détecter la fin de l'événement de changement d'orientation.
Le OrientationEventListener
n'a pas fonctionné. Comment puis-je recevoir des notifications sur les événements de changement d'orientation de la disposition?
Réponses:
Utilisez la méthode d'activité onConfigurationChanged . Voir le code suivant:
Vous devez également modifier les dans votre fichier manifeste pour inclure l' android: configChanges Il suffit de voir le code ci-dessous:
REMARQUE: avec Android 3.2 (niveau d'API 13) ou supérieur, la «taille de l'écran» change également lorsque l'appareil bascule entre l'orientation portrait et paysage. Ainsi, si vous souhaitez empêcher le redémarrage de l'exécution en raison d'un changement d'orientation lors du développement pour le niveau d'API 13 ou supérieur, vous devez déclarer android: configChanges = "orientation | screenSize" pour le niveau d'API 13 ou supérieur .
J'espère que ceci vous aidera... :)
la source
Pour le chargement de la mise en disposition terrestres moyens de dossier que vous avez deux dispositions distinctes , alors vous devez faire
setContentView
enonConfigurationChanged
méthode.Si vous n'avez qu'une seule disposition, il n'est pas nécessaire de créer setContentView dans cette méthode. simplement
la source
onConfigurationChanged(Configuration newConfig)
méthode (comme dans cette réponse), mais plutôt que de la gérer moi-même, j'ai défini un indicateur booléen, puis j'ai appelé larecreate()
méthode pour qu'Android recrée l'activité de manière normale.recreate()
méthode est qu'elle fait clignoter brièvement l'écran en noir. Pour cette raison, j'ai utilisé une autre approche: (1) enregistrer la largeur de l'écran dans leonCreate(...)
, (2) comparer la largeur de l'écran enregistrée à la largeur de l'écran actuelle dans n'importe quelle méthode de cycle de vie lorsque l'activité est terminée (par exempleonSaveInstanceState(...)
).Je voulais juste vous montrer un moyen de sauvegarder tout votre Bundle après onConfigurationChanged:
Créez un nouveau pack juste après votre cours:
Ensuite, après "protected void onCreate", ajoutez ceci:
Si vous ajoutez cela, toutes vos classes crated dans MainActivity seront enregistrées.
Mais le meilleur moyen est d'ajouter ceci dans votre AndroidManifest:
la source
onConfigurationChanged()
permet à votre instanceState de ne pas être détruit lorsque l'orientation change, vous n'avez donc pas à l'enregistrer. Vous voudrez peut-être l'enregistrer pour d'autres événements du cycle de vie de l'activité, mais je ne sais pas.utilisez cette méthode
Et n'oubliez pas d'ajouter ceci dans votre Androidmainfest.xml
comme ça
la source
Remplacer la méthode de l'activité onConfigurationChanged
la source
Je veux juste proposer une autre alternative qui concernera certains d'entre vous, en effet, comme expliqué ci-dessus:
implique que nous déclarons explicitement la mise en page à injecter.
Au cas où nous souhaiterions conserver l'injection automatique grâce aux dossiers layout-land et layout. Tout ce que vous avez à faire est de l'ajouter à onCreate:
Ici, on affiche ou non la barre d'action en fonction de l'orientation du téléphone
la source
Créez une instance de
OrientationEventListener
classe et activez-la.la source
Si la réponse acceptée ne fonctionne pas pour vous, assurez-vous de ne pas avoir défini dans le fichier manifeste:
C'est mon cas.
la source
Au cas où cela serait utile à certains développeurs plus récents car ce n'est pas spécifié ci-dessus. Juste pour être très explicite:
Vous avez besoin de deux choses si vous utilisez onConfigurationChanged :
Une
onConfigurationChanged
méthode dans votre classe d'activitéSpécifiez dans votre manifeste les modifications de configuration qui seront gérées par votre
onConfigurationChanged
méthodeL'extrait de code manifeste dans les réponses ci-dessus, bien qu'il soit sans aucun doute correct pour l'application particulière à laquelle appartient le manifeste, n'est PAS exactement ce que vous devez ajouter dans votre manifeste pour déclencher la méthode onConfigurationChanged dans votre classe d'activité. c'est-à-dire que l'entrée de manifeste ci-dessous peut ne pas être correcte pour votre application.
Dans l'entrée de manifeste ci-dessus, il existe diverses actions Android pour
android:configChanges=""
lesquelles peuvent déclencher onCreate dans le cycle de vie de votre activité.Ceci est très important - Ceux qui ne sont PAS spécifiés dans le manifeste sont ceux qui déclenchent votre onCreate et ceux qui sont spécifiés dans le manifeste sont ceux qui déclenchent votre
onConfigurationChanged
méthode dans votre classe d'activité.Vous devez donc identifier les modifications de configuration que vous devez gérer vous-même. Pour l'encyclopédie Android contestée comme moi, j'ai utilisé la fenêtre contextuelle des conseils rapides dans Android Studio et ajouté presque toutes les options de configuration possibles. La liste de tous ces éléments disait que je gérerais tout et onCreate ne sera jamais appelé en raison de configurations.
Maintenant, évidemment, je ne veux pas tout gérer, alors j'ai commencé à éliminer les options ci-dessus une par une. Reconstruire et tester mon application après chaque suppression.
Un autre point important : s'il n'y a qu'une seule option de configuration gérée automatiquement qui déclenche votre onCreate (vous ne l'avez pas répertoriée dans votre manifeste ci-dessus), alors il semblera que cela
onConfigurationChanged
ne fonctionne pas. Vous devez mettre tous les éléments pertinents dans votre manifeste.J'ai fini avec 3 qui déclenchaient onCreate à l'origine, puis j'ai testé sur un S10 + et je recevais toujours le onCreate, donc j'ai dû refaire mon exercice d'élimination et j'avais également besoin du
|screenSize
. Alors testez sur une sélection de plateformes.Donc ma suggestion, même si je suis sûr que quelqu'un peut faire des trous dans ceci:
Ajoutez votre
onConfigurationChanged
méthode dans votre classe d'activité avec un TOAST ou un journal afin que vous puissiez voir quand cela fonctionne.Ajoutez toutes les options de configuration possibles à votre manifeste.
Confirmez que votre
onConfigurationChanged
méthode fonctionne en testant votre application.Supprimez chaque option de configuration de votre fichier manifeste une par une, en testant votre application après chacune.
Testez sur une aussi grande variété d'appareils que possible.
Ne copiez / collez pas mon extrait ci-dessus dans votre fichier manifeste. Les mises à jour Android modifient la liste, utilisez donc les astuces Android Studio pour vous assurer de toutes les avoir.
J'espère que cela fera gagner du temps à quelqu'un.
Ma
onConfigurationChanged
méthode juste pour info ci-dessous.onConfigurationChanged
est appelée dans le cycle de vie une fois que la nouvelle orientation est disponible, mais avant que l'interface utilisateur n'ait été recréée. Par conséquent, ma premièreif
vérification de l'orientation fonctionne correctement, puis la deuxième imbriquéeif
pour regarder la visibilité de mon UI ImageView fonctionne également correctement.la source
pour la mise en œuvre de Kotilin dans la forme la plus simple - se déclenche uniquement lorsque l'écran passe de portrait <--> paysage si besoin d'un appareil une détection de retournement (180 degrés) vous devrez vous connecter aux valeurs du capteur de gravité
la source