2010-10-23 20 views
2

J'ai une activité qui gère les changements de configuration. Mais maintenant je dois changer la disposition .J'ai essayé dans le rappel onConfigurationChanged juste pour redéfinir la disposition et espérer obtenir la disposition correcte (terre) mais il montre toujours la première disposition pour la vue de portrait (là deux disposition (même nom) sont placé en res/ mise en page et res/layout-land :)onConfigurationChanged-il montre toujours la première mise en page

si je supprime android: configChanges = "orientation", cela devrait fonctionner, mais j'ai besoin de gérer onConfigurationChanged. Que devrais-je faire??

Répondre

15

Si vous avez votre mise en page de portrait main.xml dans /res/layout et votre mise en page de paysage main.xml dans /res/layout-land, et votre ressemble à ceci:

public void onConfigurationChanged(Configuration newConfig) { 
      super.onConfigurationChanged(newConfig);     
      setContentView(R.layout.main); 
    ... 
    ... 
    ... 

    } 

Et dans votre Manifest vous devriez avoir android:configChanges="keyboardHidden|orientation"

Ensuite, il devrait fonctionne bien, comme cela dans mon application. Est-ce ce que vous faites?

+1

oui, il fonctionne très bien :)) merci ... Je veux demander, pourquoi nous devrions écrire keyboardHidden ?? – atasoyh

+5

Je pense que sur certains appareils, lorsque quelqu'un ouvre le clavier, l'orientation change automatiquement. – ShadowGod

+0

+1 son fonctionnement bien –

3
// In your activity code. 
int mCurrentOrientation; 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_mfo_offers); 
    ........ 
    mCurrentOrientation = getCurrentOrientation(); 
} 
@Override  
public void onConfigurationChanged(Configuration newConfig) { 
     super.onConfigurationChanged(newConfig); 
     // You may handle different configuration changes in your activity which configured in your mainfest.xml, you only need to recreate layout when orientation changes. 
     if(mCurrentOrientation != newConfig.orientation) {   
      recreate(); // This recreate the activity if you can properly restore your activity state. 
     } 
     ...... 
} 

Voir Activity.recreate() ici: http://developer.android.com/reference/android/app/Activity.html#recreate()

+0

public void recreate() (Ajout au niveau API 11) Cette activité peut être recréée avec une nouvelle instance. Cela entraîne essentiellement le même flux que lors de la création de l'activité en raison d'une modification de la configuration: l'instance en cours passe par son cycle de vie à onDestroy() et une nouvelle instance est ensuite créée après celle-ci. – evanchin