[ANDROID] Comment détecter le changement d'orientation

Résolu
stagiaire_1 Messages postés 18 Statut Membre -  
scinarf Messages postés 1183 Statut Membre -
Bonjour,

Je souhaite détecter le changement d'orientation de mon terminal android.

J'utilise le code suivant :

@Override
	public void onConfigurationChanged(Configuration newConfig) {
	    super.onConfigurationChanged(newConfig);
	  
	    // Checks the orientation of the screen
	    switch (getResources().getConfiguration().orientation) {
		case Configuration.ORIENTATION_PORTRAIT: setContentView(R.layout.login); break;
		case Configuration.ORIENTATION_LANDSCAPE: setContentView(R.layout.login_landscape); break;
	    }
    
	}


Néanmoins cette méthode n'est jamais appelée même avec un changement d'orientation.

Quelqu'un aurait-il une idée de pourquoi ça ne marche pas?

Merci

1 réponse

  1. scinarf Messages postés 1183 Statut Membre 294
     
    Que souhaitez vous faire sur le changement d'orientation ?

    Vous pouvez récupérer l'orientation avec :

    int i = getResources().getConfiguration().orientation ;
    if (i == 1) Toast.makeText(this,"Protrait", 0).show();
    else if (i == 2) Toast.makeText(this,"Paysage", 0).show();

    Après avoir testé la chose, je vous propose la Class OrientationEventListener

    de cette manière dans un nouveau fichier .java dans le même package que votre MainActivity:

    import android.content.Context;
    import android.view.OrientationEventListener;
    import android.widget.Toast;

    public class onOrientationChanged extends OrientationEventListener
    {
    private Context context;

    public onOrientationChanged(Context c)
    {
    super(c);
    // TODO Auto-generated constructor stub
    context = c;
    }

    public onOrientationChanged(Context context, int rate) {
    super(context, rate);
    // TODO Auto-generated constructor stub
    }

    @Override
    public void onOrientationChanged(int orientation)
    {
    // TODO Auto-generated method stub
    int i = orientation;
    if (i == 0) Toast.makeText(context,"Protrait", 0).show();
    else if (i == 2) Toast.makeText(context,"Paysage", 0).show();
    else Toast.makeText(context,"Orientation : " + String.valueOf(i), 0).show();
    }

    }

    Et dans votre MainActivity : Ceci

    private onOrientationChanged orientation=null;

    dans le onCreate()
    orientation = new onOrientationChanged(this);
    orientation.enable();

    la méthode onOrientationChanged est appelée à chaque changement de position, il ne reste plus que a filtrer sur (int) orientation qui donne les degrés en celsius de l'orientation. (ou des valeurs particulières comme 0 pour portrait et 2 pour paysage)

    Bonne chance
    0