Eu simplesmente não preciso de nada para mudar quando a tela é girada. Meu aplicativo exibe uma imagem aleatória quando é carregado pela primeira vez e a rotação do dispositivo não deve selecionar outra imagem aleatória. Como posso (simplesmente) fazer esse comportamento parar?
152
Screen.lockOrientation(this)
de github.com/delight-im/Android-BaseLib/blob/master/Source/src/im/… para isso. Permite desbloquear o que o manifesto não permite.Respostas:
Geralmente, existem três maneiras de fazer isso:
Como algumas das respostas sugeridas, você pode distinguir os casos de sua atividade sendo criada pela primeira vez e restaurada
savedInstanceState
. Isso é feito sobrescrevendoonSaveInstanceState
e verificando o parâmetro deonCreate
.Você pode bloquear a atividade em uma orientação adicionando
android:screenOrientation="portrait"
(ou"landscape"
) ao<activity>
seu manifesto.Você pode dizer ao sistema que pretende lidar com as alterações na tela especificando
android:configChanges="orientation|screenSize"
na<activity>
tag. Dessa forma, a atividade não será recriada, mas receberá um retorno de chamada (que você pode ignorar, pois não é útil para você).Pessoalmente, eu iria com (3). Obviamente, se bloquear o aplicativo em uma das orientações é bom para você, você também pode ir com (2).
fonte
android:configChanges="orientation|screenSize"
android:configChanges="orientation|screenSize"
funciona para mim. Obrigado @Pacerierandroid:configChanges="orientation|screenSize"
valor da API> = 13, porque muitas pessoas vêem sua resposta como principal!A resposta de Xion foi próxima, mas o item 3 (
android:configChanes="orientation"
) não funcionará, a menos que o aplicativo tenha um nível de API igual ou inferior a 12.No nível 13 ou superior da API, o tamanho da tela muda quando a orientação é alterada, portanto, isso ainda causa a destruição da atividade e o início da mudança.
Basta adicionar o atributo "screenSize", como fiz abaixo:
Agora, quando você altera a orientação (e o tamanho da tela muda), a atividade mantém seu estado e
onConfigurationChanged()
é chamada. Isso manterá o que estiver na tela (por exemplo: página da web em uma visualização na web) quando a orientação mudar.Aprendi isso neste site: http://developer.android.com/guide/topics/manifest/activity-element.html
Além disso, essa é aparentemente uma prática ruim, então leia o link abaixo sobre o tratamento de alterações no tempo de execução:
http://developer.android.com/guide/topics/resources/runtime-changes.html
fonte
android:configChanges="orientation|screenSize"
Você só precisa acessar os
AndroidManifest.xml
rótulos de dentro e de dentro de suas atividades; digitar esta linha de código como alguém lá em cima disse:Então, você terá algo parecido com isto:
Espero que funcione!
fonte
Basta adicionar
android:configChanges="orientation|screenSize"
na guia de atividade do arquivo de manifesto.Portanto, a atividade não será reiniciada quando a orientação mudar.
fonte
onSaveInstanceState()
eonCreate()
.É minha experiência que é realmente melhor lidar com as mudanças de orientação corretamente, em vez de tentar calçar um comportamento não padrão.
Você deve salvar a imagem exibida no momento
onSaveInstanceState()
e restaurá-la corretamente quando o aplicativo for executadoonCreate()
novamente.fonte
android:configChanges
deve ser evitado e usado apenas como último recurso. Leia Manipulando alterações no tempo de execução para obter mais informações sobre como lidar adequadamente com uma reinicialização devido a uma alteração na configuração."Esta solução é de longe a melhor que funciona. No seu arquivo de manifesto, adicione
E na sua classe de atividade, adicione o seguinte código
fonte
adicione
android:configChanges="keyboardHidden|orientation|screenSize"
para todas as tags de atividades do aplicativo no manifesto.fonte
Basta adicionar isso ao seu
AndroidManifest.xml
Quero dizer, há uma tag de atividade, adicione isso como outro parâmetro. Caso precise de orientação para retrato, mude paisagem para retrato. Espero que isto ajude.
fonte
No arquivo mais manifesto, adicione a cada atividade isso. Isso vai ajudar
fonte
Todas as respostas acima não estão funcionando para mim. Então, eu corrigi mencionando o
label
comscreenOrientation
como abaixo. Agora está tudo bemfonte
http://animeshrivastava.blogspot.in/2017/08/activity-lifecycle-oncreate-beating_3.html
fonte
Salve os detalhes da imagem no seu
onPause()
ouonStop()
use-o noonCreate(Bundle savedInstanceState)
para restaurar a imagem.EDITAR:
Mais informações sobre o processo real estão detalhadas aqui http://developer.android.com/reference/android/app/Activity.html#ActivityLifecycle , pois é diferente no Honeycomb do que nas versões anteriores do Android.
fonte
Apenas use :
android:configChanges="keyboardHidden|orientation"
fonte
Como Pacerier mencionou,
android:configChanges="orientation|screenSize"
fonte
Não sei se é a melhor solução, mas descrevo-a aqui:
Primeiro de tudo, você precisa de um certificado com sua classe O aplicativo do seu aplicativo está no manifesto disso:
Segundo, na minha classe App, eu fiz assim:
Terceiro, você precisa definir um sinalizador para Mudança de orientação, no meu caso, eu sempre o defino quando a atividade anterior na navegação do aplicativo é chamada, portanto, é só chamar uma vez quando a atividade posterior é criada.
Portanto, toda vez que altero a orientação da minha tela nesse contexto, defino-a sempre que altera essa configuração, verifica se há uma alteração na orientação; nesse caso, valida-a com base no valor desse sinalizador.
Basicamente, eu precisava usá-lo sempre que fazia uma solicitação de atualização assíncrona, que ele chamava a cada momento que mudava de orientação, travando constantemente o aplicativo:
Não sei se é a solução mais elegante e bonita, mas pelo menos aqui é funcional :)
fonte
Adicione esse código após o
onCreate
método, em sua atividade que contém oWebView
fonte