Comment détecter le changement d’orientation dans la mise en page dans Android?

Je viens de mettre en place une fonction de changement d’orientation – par exemple lorsque la mise en page change de portrait en paysage (ou vice versa). Comment puis-je détecter le moment où l’événement de changement d’orientation s’est terminé?

Le OrientationEventListener n’a pas fonctionné. Comment puis-je recevoir des notifications sur les événements de changement d’orientation de mise en page?

Utilisez la méthode onConfigurationChanged de l’activité. Voir le code suivant:

 @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); // Checks the orientation of the screen if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) { Toast.makeText(this, "landscape", Toast.LENGTH_SHORT).show(); } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){ Toast.makeText(this, "portrait", Toast.LENGTH_SHORT).show(); } } 

Vous devez également modifier le bon élément dans votre fichier manifeste pour inclure l’ android: configChanges Voyez le code ci-dessous:

  

REMARQUE: avec Android 3.2 (API niveau 13) ou supérieur, la “taille de l’écran” change également lorsque le périphérique bascule entre les modes portrait et paysage. Par conséquent, si vous souhaitez empêcher les redémarrages à cause du changement d’orientation lors du développement de l’API de niveau 13 ou supérieur, vous devez déclarer android: configChanges = “orientation | screenSize” pour le niveau 13 ou supérieur de l’API .

J’espère que ceci vous aidera… 🙂

Pour charger la mise en page dans un dossier de mise en page , vous devez disposer de deux dispositions distinctes, vous devez setContentView onConfigurationChanged méthode setContentView dans la méthode onConfigurationChanged .

 @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); // Checks the orientation of the screen if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) { setContentView(R.layout.yourxmlinlayout-land); } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){ setContentView(R.layout.yourxmlinlayoutfolder); } } 

Si vous ne disposez que d’une seule mise en page, il n’est pas nécessaire de définir setContentView dans This method. simplement

 @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); } 

Je voulais juste vous montrer un moyen de sauvegarder tout votre Bundle après onConfigurationChanged:

Créez un nouveau bundle juste après votre cours:

 public class MainActivity extends Activity { Bundle newBundy = new Bundle(); 

Ensuite, après “protected void onCreate”, ajoutez ceci:

 @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) { onSaveInstanceState(newBundy); } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) { onSaveInstanceState(newBundy); } } @Override public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putBundle("newBundy", newBundy); } @Override protected void onRestoreInstanceState(Bundle savedInstanceState) { super.onRestoreInstanceState(savedInstanceState); savedInstanceState.getBundle("newBundy"); } 

Si vous ajoutez ceci, toutes vos classes créées dans MainActivity seront enregistrées.

Mais le meilleur moyen est d’append ceci dans votre AndroidManifest:

  

Remplacer la méthode de l’activité surConfigurationChanged

utiliser cette méthode

 @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) { Toast.makeText(getActivity(),"PORTRAIT",Toast.LENGTH_LONG).show(); //add your code what you want to do when screen on PORTRAIT MODE } else if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) { Toast.makeText(getActivity(),"LANDSCAPE",Toast.LENGTH_LONG).show(); //add your code what you want to do when screen on LANDSCAPE MODE } } 

Et n’oubliez pas d’append ceci dans votre Androidmainfest.xml

 android:configChanges="orientation|screenSize" 

comme ça

   

Créer l’instance de la classe OrientationEventListener

 OrientationEventListener mOrientationEventListener = new OrientationEventListener(YourActivity.this) { @Override public void onOrientationChanged(int orientation) { Log.d(TAG,"orientation = " + orientation); }