2011-06-09 3 views

Répondre

29

Vous avez deux choix:

Dans votre Manifest, mettez:

<activity android:name=".HelloAndroid" 
    android:label="@string/app_name" 
    android:configChanges="orientation"> 

Et, dans le code, override onConfigurationChanged

@Override 
public void onConfigurationChanged(Configuration newConfig) { 
    super.onConfigurationChanged(newConfig); 
    setContentView(R.layout.main);  
    // TODO 
} 

est ici un bon tutorial à ce sujet .

+0

@ferostar Do les changements de configuration signalent un changement d'orientation du périphérique ou un changement d'orientation de l'interface utilisateur? Le premier semble clair puisqu'il utilise le gestionnaire de capteur. Je n'étais pas sûr de la seconde. – Mark13426

+0

À partir du niveau API 13 et supérieur, l'attribut manifest configChanges doit être: "orientation | screenSize". Voir cette réponse pour plus d'informations: https://stackoverflow.com/questions/5620033/onconfigurationchanged-not-getting-called – user885232

15

Dans votre activité, vous pouvez remplacer cette méthode pour écouter le changement d'orientation et implémenter votre propre code.

public void onConfigurationChanged (Configuration newConfig) 

La Configuration classe a une constante int il ORIENTATION_LANDSCAPE et ORIENTATION_PORTRAIT, vous pouvez vérifier la NewConfig comme ceci:

super.onConfigurationChanged (NewConfig);

int orientation=newConfig.orientation; 

switch(orientation) { 

case Configuration.ORIENTATION_LANDSCAPE: 

//to do something 
break; 

case Configuration.ORIENTATION_PORTRAIT: 

//to do something 
break; 

} 
+3

Huang - votre suggestion fonctionne bien, avec une édition. Vous devez ajouter 'super.onConfigurationChanged (newConfig);' au début de la méthode pour éviter de provoquer une exception. –

+0

oui, le super appel est nécessaire. en éclipse, cette ligne sera automatiquement ajoutée. C'est pourquoi j'ai omis. – Huang

+1

Jamais appelé: S. Même si je mets 'android: configChanges =" orientation "' dans le manifeste – IgniteCoders

4

Au Android 3.2, vous devez également ajouter "ScreenSize" dans androidmanifest pour une activité spécifique

Ainsi, votre déclaration d'activité en xml deviendra

<activity android:name=".ExampleActivity" 
    android:label="@string/app_name" 
    android:configChanges="orientation|screenSize">