J'ai du mal à dire à Android de ne pas appeler onCreate()
lorsque l'orientation change. J'ai ajouté Android:configChanges="orientation"
à mon manifeste, mais toujours lorsque l'orientation change, onCreate()
est appelé. Voici mon code.
AndroidManifest.xml
<activity Android:name="SearchMenuActivity" Android:theme="@Android:style/Theme.NoTitleBar" Android:configChanges="orientation"></activity>
SearchMenuActivity.Java
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Set the current layout to the search_menu
setContentView(R.layout.search_menu_activity);
Log.d(TAG, "onCreate() Called");
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
//don't reload the current page when the orientation is changed
Log.d(TAG, "onConfigurationChanged() Called");
super.onConfigurationChanged(newConfig);
}
Et ma sortie LogCat
06-23 12:33:20.327: DEBUG/APP(2905): onCreate() Called
//Orientation Changes
06-23 12:33:23.842: DEBUG/APP(2905): onCreate() Called
Est-ce que quelqu'un sait ce que je fais mal? Merci.
Quelques choses à essayer:
Android:configChanges="orientation|keyboardHidden|screenSize"
plutôt que Android:configChanges="orientation"
Assurez-vous que vous n'appelez pas setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
nulle part. OnConfigurationChange () ne se déclenchera pas.
Vérifiez que vous n'utilisez pas Android:screenOrientation
dans votre manifeste.
Si rien de tout cela ne fonctionne, lisez le document Android sur la gestion des modifications d'exécution et assurez-vous de tout faire correctement. Il peut y avoir quelque chose quelque part ailleurs dans votre code qui cause le problème. http://developer.Android.com/guide/topics/resources/runtime-changes.html
EDIT: Comme Derrik l’a fait remarquer, j’ai supposé que vous changiez la configuration avec l’accéléromètre pour détecter la position du périphérique. Si vous souhaitez que la configuration change lorsque le clavier est affiché/masqué, les modifications de config dans le manifeste doivent également inclure keyboardHidden
.
C'était mon gremlin pour le même problème:
Attention: à partir de Android 3.2 (API niveau 13), la "taille de l'écran" change également lorsque l'appareil bascule entre portrait et paysage orientation. Ainsi, si vous souhaitez empêcher les redémarrages d’exécution dus à changement d'orientation lors du développement pour l'API de niveau 13 ou supérieur (comme déclaré par les attributs minSdkVersion et targetSdkVersion), vous doit inclure la valeur "screenSize" en plus de "l'orientation" valeur. Autrement dit, vous devez decalare Android: configChanges = "orientation | screenSize". Cependant, si votre API d'application de niveau 12 ou moins, votre activité est toujours gère cette modification de configuration elle-même (cette modification de configuration ne redémarre pas votre activité, même si elle est exécutée sur un appareil Android 3.2 ou supérieur).
(De http://developer.Android.com/guide/topics/resources/runtime-changes.html )
TL; DR: ajouter "| screenSize" à Android: configChanges = "orientation" pour API 14+
Essayez d'utiliser celui-ci .....
Android:configChanges="orientation|keyboardHidden|screenSize"
Vous devez modifier l'entrée configChanges dans AndroidManifest.xml en:
Android:configChanges="keyboardHidden|orientation"
Sinon, le fait de faire glisser le clavier ne déclenche pas onConfigurationChange (), même si l'orientation change. Je viens de tester cela sur mon HTC Desire Z.
Ajoutez ceci à votre manifeste pour chaque activité.
Android:configChanges="keyboardHidden|orientation|screenSize"
Ensuite, remplacez onConfigurationChanged
sur votre activité en tant que telle
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
}
Cela ne se déclenchait pas dans ma Fragment
(Fragments
ne sont pas enregistrés dans le AndroidManifest.xml
). J'ai donc dû le déplacer dans la Activity
qui gère ma Fragment
, dans mon cas la TabsPagerActivity
.
Manifeste:
<activity
Android:name=".MainActivity"
Android:configChanges="orientation|keyboardHidden|screenSize">
</activity>
Activité et fragment:
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
Log.d(TAG, "onConfigurationChanged " +
(newConfig.orientation
== Configuration.ORIENTATION_LANDSCAPE
? "landscape" : "portrait"));
}
Sortie:
10-29 21:53:26.951 D/FragmentOne: onConfigurationChanged landscape 10-29 21:53:26.951 D/MainActivity:onConfigurationChanged landscape
Peu de choses peuvent être vérifiées:
Dans mon cas, je suivais le changement de langue du périphérique à l'aide de onConfigurationChanged.
Peu de choses à savoir sur onConfigurationChanged sont les différences de comportement entre onConfigurationChanged d'activité et d'application.
Lorsque vous modifiez la configuration du périphérique, le niveau d'application onConfigurationChanged sera appelé automatiquement et immédiatement, mais onConfigurationChanged d'activité sera appelé lorsque vous accéderez à cette activité.
et une autre chose est que seule la locale dans manifest ne fonctionnera pas parfois. Vous devez donc déclarer un autre événement de modification de configuration avec la locale (dans mon cas) qui devrait être comme Android: configChanges = "layoutDirection | locale"