Como posso verificar se o telefone Android está no modo Paisagem ou Retrato?
java
android
orientation
Mohit Deshpande
fonte
fonte
Respostas:
A configuração atual, conforme usada para determinar quais recursos recuperar, está disponível no
Configuration
objeto 'Recursos' :Você pode verificar a orientação observando seu valor:
Mais informações podem ser encontradas no Desenvolvedor Android .
fonte
android:screenOrientation="portrait"
), esse método retornará o mesmo valor, independentemente de como o usuário gire o dispositivo. Nesse caso, você usaria o acelerômetro ou o sensor de gravidade para descobrir a orientação corretamente.Se você usar a orientação getResources (). GetConfiguration (). Em alguns dispositivos, errará. Usamos essa abordagem inicialmente em http://apphance.com . Graças ao registro remoto do Apphance, pudemos vê-lo em diferentes dispositivos e vimos que a fragmentação desempenha seu papel aqui. Vi casos estranhos: por exemplo, alternando retrato e quadrado (?!) no HTC Desire HD:
ou não alterar a orientação:
Por outro lado, a largura () e a altura () estão sempre corretas (são usadas pelo gerenciador de janelas, por isso deveria ser melhor). Eu diria que a melhor idéia é fazer a largura / altura verificando SEMPRE. Se você pensar um pouco, é exatamente isso que você deseja - saber se a largura é menor que a altura (retrato), o oposto (paisagem) ou se são iguais (quadrado).
Então se resume a este código simples:
fonte
getWidth
egetHeight
não são preteridos.getSize(Point outSize)
vez disso. Estou usando a API 23.Outra maneira de resolver esse problema é não depender do valor de retorno correto da exibição, mas depender da resolução dos recursos do Android.
Crie o arquivo
layouts.xml
nas pastasres/values-land
eres/values-port
com o seguinte conteúdo:res / valores-terra / layouts.xml:
res / valores-porta / layouts.xml:
No seu código-fonte, agora você pode acessar a orientação atual da seguinte maneira:
fonte
Uma maneira completa de especificar a orientação atual do telefone:
Chear Binh Nguyen
fonte
getOrientation()
funciona, mas isso não está correto se estiver usandogetRotation()
. Obter"Returns the rotation of the screen from its "natural" orientation."
fonte de rotação . Portanto, em um telefone dizendo que ROTATION_0 é retrato provavelmente está correto, mas em um tablet sua orientação "natural" é provavelmente paisagem e ROTATION_0 deve retornar paisagem em vez de retrato.Aqui está a demonstração do snippet de código, como obter orientação da tela, foi recomendado por hackbod e Martijn :
❶ Disparar quando mudar de orientação:
❷ Obtenha orientação atual, como o hackbod recomenda:
AreExistem soluções alternativas para obter a orientação atual da tela ❷ siga a solução Martijn :
★ Nota : tentei implementar o ❷ & ❸, mas na orientação do RealDevice (NexusOne SDK 2.3), ele retorna a orientação incorreta.
★ Portanto, recomendo usar a solução ❷ para obter a orientação da tela que possui mais vantagens: claramente, simples e funciona como um encanto.
★ Verifique cuidadosamente o retorno da orientação para garantir a correção conforme o esperado (pode haver limitações, dependendo da especificação dos dispositivos físicos)
Espero que ajude,
fonte
fonte
Use
getResources().getConfiguration().orientation
da maneira certa.Você só precisa observar diferentes tipos de paisagens, a paisagem que o dispositivo normalmente usa e a outra.
Ainda não entendo como gerenciar isso.
fonte
Algum tempo se passou desde que a maioria dessas respostas foi publicada e alguns agora usam métodos e constantes obsoletos.
Atualizei o código de Jarek para não usar mais esses métodos e constantes:
Observe que o modo
Configuration.ORIENTATION_SQUARE
não é mais suportado.Eu achei isso confiável em todos os dispositivos em que testei, em contraste com o método que sugere o uso de
getResources().getConfiguration().orientation
fonte
Verifique a orientação da tela em tempo de execução.
fonte
Há mais uma maneira de fazer isso:
fonte
O SDK do Android pode lhe dizer isso:
fonte
Testado em 2019 na API 28, independentemente do usuário ter definido a orientação retrato ou não, e com um código mínimo comparado a outra resposta desatualizada , o seguinte fornece a orientação correta:
fonte
Eu acho que esse código pode funcionar após a mudança de orientação ter efeito
substitua a função Activity.onConfigurationChanged (Configuration newConfig) e use newConfig, orientação se desejar ser notificado sobre a nova orientação antes de chamar setContentView.
fonte
Eu acho que usar getRotationv () não ajuda porque http://developer.android.com/reference/android/view/Display.html#getRotation%28%29 getRotation () Retorna a rotação da tela do seu "natural" orientação.
portanto, a menos que você conheça a orientação "natural", a rotação não faz sentido.
eu encontrei uma maneira mais fácil,
por favor me diga se há algum problema com este alguém?
fonte
tal é sobreposição de todos os telefones, como oneplus3
código correto da seguinte maneira:
fonte
Post antigo que eu conheço. Qualquer que seja a orientação ou a troca, etc. Projetei essa função que é usada para definir o dispositivo na orientação correta, sem a necessidade de saber como os recursos de retrato e paisagem são organizados no dispositivo.
Funciona como um encanto!
fonte
Use desta maneira,
na corda você tem o oriantion
fonte
existem muitas maneiras de fazer isso, esse trecho de código funciona para mim
fonte
Eu acho que essa solução é fácil
fonte
Simples código de duas linhas
fonte
Simples e fácil :)
No arquivo java, escreva:
no
onCreate
método e antes desetContentView
escrever:fonte
Também é importante notar que hoje em dia, há menos boas razões para procurar orientação explícita,
getResources().getConfiguration().orientation
se você estiver fazendo isso por motivos de layout, pois o Suporte para várias janelas introduzido no Android 7 / API 24+ pode mexer com seus layouts bastante nos orientação. É melhor considerar o uso<ConstraintLayout>
e layouts alternativos, dependendo da largura ou altura disponíveis , juntamente com outros truques para determinar qual layout está sendo usado, por exemplo, a presença ou não de certos fragmentos anexados à sua atividade.fonte
Você pode usar isso (com base aqui ):
fonte