2017-03-06 1 views
0

J'ai une application Android avec une activité et un ViewPager personnalisé avec plusieurs fragments. Toute mon activité est verrouillée en portrait, mais maintenant je dois détecter, à l'intérieur d'un fragment spécifique, quand l'appareil est en paysage et lancer une autre activité verrouillée en paysage. Dans cette nouvelle activité, lorsque l'utilisateur met un appareil en mode portrait, je le ferme et retourne à l'activité portrait. Ce est AndroidManifest.xml code:Android: détecter le changement d'orientation de l'écran également si l'orientation est verrouillée

<activity 
     android:name="com.mypackage.MainActivity" 
     android:configChanges="orientation" 
     android:label="@string/app_name" 
     android:launchMode="singleTask" 
     android:screenOrientation="portrait" 
     android:theme="@style/Theme.AppCompat.Light" > 
    </activity> 

et ce code est à l'intérieur de fragment qui doit détecter le paysage:

public void onConfigurationChanged(Configuration myConfig) { 
    int orient = getResources().getConfiguration().orientation; 
    switch (orient) { 
    case Configuration.ORIENTATION_LANDSCAPE: 
     //Launch new activity 
     break; 
    }  
} 

Maintenant, je l'ai remarqué que onConfigurationChanges est jamais appelé avec cette configuration manifeste, mais est appelé seulement si je supprimer

android:screenOrientation="portrait" 

Il y a une façon de garder MainActivity enfermé dans le portrait et le paysage interceptent aussi?

Répondre

0

Maintenant, j'ai remarqué que onConfigurationChanges() n'est jamais appelé

pourquoi il en est ainsi surpring pour vous? Vous avez explicitement désactivé le changement d'orientation, il n'y a aucun intérêt à ce que cette méthode soit appelée. Notez que l'orientation se réfère à l'écran l'orientation, pas l'orientation de l'appareil.

lorsque l'appareil est dans le paysage et lancer une autre activité bloquée dans le paysage

Vous pouvez soit manger du gâteau ou de garder le gâteau afin que vous soit appliquer une orientation fixe ou ont onConfigurationChanges() appelé.

lancer une autre activité verrouillée

pourquoi pas simplement le fichier de mise en page séparée pour la même activité? Switch sera automatiquement géré par le framework, donc aucun code spécial n'est nécessaire - juste le fichier dans le dossier correctement nommé (voir docs: https://developer.android.com/guide/topics/resources/providing-resources.html)

+0

parce que j'ai un ViewPager dans mon activité conçu pour travailler uniquement en portrait, et parce que j'ai besoin pour passer en mode portrait uniquement si l'utilisateur est sur un fragment spécifique – giozh

+0

alors il semble que vous ayez quelque chose de mal conçu en termes tels que ViewPager ne devrait être utilisé qu'en portrait. Mais il ne devrait pas avoir besoin d'être conscient de l'orientation car elle ne devrait pas être sa tâche –