2015-03-16 2 views
5

Je n'arrive pas à comprendre pourquoi la définition de l'attribut "sensorPortrait" dans un manifeste pour une activité ne fonctionne pas pour permettre à l'activité de passer en mode portrait inversé. Voilà comment je mis dans le manifesteComment activer uniquement le portrait et le portrait inversé dans les téléphones, "sensorPortrait" ne fonctionne pas sur les téléphones?

<activity 
     android:name=".MainActivty" 
     android:label="Testing" 
     android:screenOrientation="sensorPortrait" 
     android:windowSoftInputMode="stateHidden" 
     android:configChanges="orientation"> 
    </activity> 

Le code ci-dessus ne fonctionne pas pour moi d'obtenir à la fois reversePortrait et portrait sur Moto E (4.4.4) ou Galaxy S3 (4.3), mais je peux confirmer qu'il fonctionne sur une tablette Nexus 7 (5.0.1), j'ai essayé plusieurs autres réponses mais celle-ci semble être la plus facile et ça ne marche apparemment pas pour moi sur les 'téléphones', est-ce que je manque des informations pertinentes pour que cela fonctionne?

J'ai essayé le lien suivant qui est tout aussi similaire que ma question, mais rien ne semble utile au sujet de cette

Activity in portrait or reverse portrait only

Actuellement avec le drapeau « sensorPortrait » il se comporte comme paramètre « portrait », dans les téléphones .

+0

J'ai le même problème sur Xperia Z2 et SDK version 21 dans le manifeste. Je ne reçois jamais un portrait inversé même si j'accepte toutes les orientations. Quelle est votre targetSdkVersion et minSdkVersion? – Radon8472

+0

En fait, comme dans mon commentaire avant à ianhanniballake, nous pouvons avoir le portrait inverse, quand nous passons en mode fullSensor, je l'ai testé dans mon Xperia Z2, en exécutant Lollipop 5.1.1, où j'ai mon min sdk en 15 et cible sdk comme 23. Leur seul problème est que dans le capteur complet, il tournera dans toutes les directions. –

+0

Hmm, documentations dit '** sensorPortrait **: orientation portrait, mais peut être soit portrait normal ou inverse basé sur le capteur de l'appareil' Mais sur '** fullSensor ** est une note 'certains appareils n'utiliseront normalement pas inverse portrait ou paysage inverse, mais cela permet ceux ». Donc le quesion est, Comment activer seulement le portrait et inverserPortrait sur les appareils ce que normalement ne pas utiliser les vues de la reverve. – Radon8472

Répondre

1

Si vous regardez le PhoneWindowManager source code, vous pouvez voir qu'il vérifie la valeur interne config_allowAllRotations et l'utilise pour déterminer si la rotation de 180 degrés (c'est-à-dire, portrait inverse sur les téléphones) est autorisée.

Avec default value to false, cela signifie que le portrait inversé est désactivé sur les téléphones. Vous remarquerez que le sw600dp value (c'est-à-dire, les tablettes) est vrai, d'où la raison pour laquelle vous pouvez utiliser toutes les rotations, y compris le reverse portrait sur les tablettes.

+2

Ce que vous dites a du sens mais encore une fois si je règle android: screenOrientation = "fullSensor" inverse portrait se produira même dans les téléphones. En fait, toutes les 4 rotations se passent sans problèmes pour ce mode d'orientation particulier, alors que pensez-vous qu'il se passe là-bas, ignore-t-il ce que la valeur interne a? –