Comment puis-je vérifier si le téléphone Android est en mode paysage ou portrait?
java
android
orientation
Mohit Deshpande
la source
la source
Réponses:
La configuration actuelle, utilisée pour déterminer les ressources à récupérer, est disponible à partir de l'
Configuration
objet Resources :Vous pouvez vérifier l'orientation en regardant sa valeur:
Plus d'informations peuvent être trouvées dans le développeur Android .
la source
android:screenOrientation="portrait"
), cette méthode renvoie la même valeur quelle que soit la façon dont l'utilisateur fait pivoter l'appareil. Dans ce cas, vous utiliseriez l'accéléromètre ou le capteur de gravité pour déterminer correctement l'orientation.Si vous utilisez l'orientation getResources (). GetConfiguration (). Sur certains appareils, vous vous tromperez. Nous avons utilisé cette approche initialement dans http://apphance.com . Grâce à la journalisation à distance d'Apphance, nous avons pu le voir sur différents appareils et nous avons vu que la fragmentation joue son rôle ici. J'ai vu des cas étranges: par exemple en alternant portrait et carré (?!) Sur HTC Desire HD:
ou ne change pas d'orientation du tout:
D'un autre côté, width () et height () sont toujours corrects (ils sont utilisés par le gestionnaire de fenêtres, donc il vaut mieux). Je dirais que la meilleure idée est de faire TOUJOURS la vérification largeur / hauteur. Si vous pensez à un moment, c'est exactement ce que vous voulez - savoir si la largeur est plus petite que la hauteur (portrait), l'opposé (paysage) ou si elles sont identiques (carré).
Ensuite, cela revient à ce code simple:
la source
getWidth
etgetHeight
ne sont pas dépréciés.getSize(Point outSize)
plutôt. J'utilise l'API 23.Une autre façon de résoudre ce problème est de ne pas compter sur la valeur de retour correcte de l'affichage mais de compter sur la résolution des ressources Android.
Créez le fichier
layouts.xml
dans les dossiersres/values-land
etres/values-port
avec le contenu suivant:res / values-land / layouts.xml:
res / values-port / layouts.xml:
Dans votre code source, vous pouvez maintenant accéder à l'orientation actuelle comme suit:
la source
Un moyen complet de spécifier l'orientation actuelle du téléphone:
Chear Binh Nguyen
la source
getOrientation()
marche, mais ce n'est pas correct si j'utilisegetRotation()
. Obtenez la"Returns the rotation of the screen from its "natural" orientation."
source de rotation . Ainsi, sur un téléphone disant ROTATION_0 est portrait est probablement correct, mais sur une tablette son orientation "naturelle" est probablement paysage et ROTATION_0 devrait retourner paysage plutôt que portrait.Voici une démonstration d'extrait de code comment obtenir l'orientation de l'écran a été recommandée par hackbod et Martijn :
❶ Déclencher lors du changement d'orientation:
❷ Obtenez l'orientation actuelle comme le recommande hackbod :
❸Il existe une solution alternative pour obtenir l'orientation actuelle de l'écran ❷ suivez la solution Martijn :
★ Remarque : j'ai essayé d'implémenter ❷ et ❸, mais sur RealDevice (NexusOne SDK 2.3) Orientation, il renvoie la mauvaise orientation.
★ Je recommande donc d'utiliser la solution utilisée ❷ pour obtenir une orientation d'écran qui présente plus d'avantages: clairement, simple et fonctionne comme un charme.
★ Vérifiez soigneusement le retour de l'orientation pour vous assurer qu'elle est correcte comme prévu (peut être limité en fonction des spécifications des appareils physiques)
J'espère que ça aide,
la source
la source
Utilisez
getResources().getConfiguration().orientation
c'est la bonne façon.Il suffit de faire attention aux différents types de paysages, le paysage que l'appareil utilise normalement et l'autre.
Je ne comprends toujours pas comment gérer cela.
la source
Un certain temps s'est écoulé depuis que la plupart de ces réponses ont été publiées et certaines utilisent désormais des méthodes et des constantes obsolètes.
J'ai mis à jour le code de Jarek pour ne plus utiliser ces méthodes et constantes:
Notez que le mode
Configuration.ORIENTATION_SQUARE
n'est plus pris en charge.J'ai trouvé cela fiable sur tous les appareils sur lesquels je l'ai testé contrairement à la méthode suggérant l'utilisation de
getResources().getConfiguration().orientation
la source
Vérifiez l'orientation de l'écran lors de l'exécution.
la source
Il existe une autre façon de procéder:
la source
Le SDK Android peut très bien vous le dire:
la source
Testé en 2019 sur l'API 28, quel que soit l'utilisateur ayant défini l'orientation portrait ou non, et avec un code minimal par rapport à une autre réponse obsolète , ce qui suit fournit l'orientation correcte:
la source
Je pense que ce code peut fonctionner après que le changement d'orientation a pris effet
remplacer la fonction Activity.onConfigurationChanged (Configuration newConfig) et utiliser newConfig, orientation si vous souhaitez être averti de la nouvelle orientation avant d'appeler setContentView.
la source
je pense que l'utilisation de getRotationv () n'aide pas parce que http://developer.android.com/reference/android/view/Display.html#getRotation%28%29 getRotation () Renvoie la rotation de l'écran à partir de son "naturel" orientation.
donc à moins que vous ne connaissiez l'orientation "naturelle", la rotation n'a pas de sens.
j'ai trouvé un moyen plus simple,
s'il vous plaît dites-moi s'il y a un problème avec cette personne?
la source
tel est superposé tous les téléphones tels que oneplus3
code droit comme suit:
la source
Ancien poste, je sais. Quelle que soit l'orientation ou la permutation, etc. J'ai conçu cette fonction qui permet de régler l'appareil dans la bonne orientation sans avoir besoin de savoir comment les fonctions portrait et paysage sont organisées sur l'appareil.
Fonctionne comme un charme!
la source
Utilisez de cette façon,
dans la chaîne, vous avez l'Oriantion
la source
il y a plusieurs façons de le faire, ce morceau de code fonctionne pour moi
la source
Je pense que cette solution est simple
la source
Code simple à deux lignes
la source
Simple et facile :)
Dans le fichier java, écrivez:
à la
onCreate
méthode et avant d'setContentView
écrire:la source
Il convient également de noter que de nos jours, il y a moins de bonnes raisons de vérifier l'orientation explicite
getResources().getConfiguration().orientation
si vous le faites pour des raisons de mise en page, car la prise en charge multi-fenêtres introduite dans Android 7 / API 24+ pourrait gâcher vos mises en page un peu orientation. Mieux vaut envisager d'utiliser<ConstraintLayout>
, et des dispositions alternatives en fonction de la largeur ou de la hauteur disponible , ainsi que d'autres astuces pour déterminer quelle disposition est utilisée, par exemple la présence ou non de certains fragments attachés à votre activité.la source
Vous pouvez utiliser ceci (basé sur ici ):
la source