Eu tenho um aplicativo que gostaria de usar no modo retrato, por isso defini android: screenOrientation = "portrait" no XML do manifesto. Isso funciona bem para o HTC Magic telefone (e evita alterações de orientação em outros telefones também).
Mas tenho um problema com o telefone HTC G1 quando abro o teclado QWERTY de hardware (não o teclado virtual). Minha atividade permanece no modo retrato, mas parece ser reiniciada e perde todos os seus estados. Isso não acontece com o HTC Hero versão .
Meu aplicativo é muito grande, então não quero que ele seja reiniciado e perca todos os seus estados quando o teclado for aberto. Como posso evitar isso?
android
android-activity
android-orientation
Vidar Vestnes
fonte
fonte
Respostas:
Atualização de abril de 2013: não faça isso. Não foi uma boa ideia em 2009, quando eu respondi a pergunta, e realmente não é uma boa ideia agora. Veja esta resposta por hackbod por razões:
Evite recarregar atividades com o asynctask na mudança de orientação no android
Adicione
android:configChanges="keyboardHidden|orientation"
ao seu AndroidManifest.xml. Isso informa ao sistema quais alterações de configuração você irá gerenciar - nesse caso, sem fazer nada.Consulte Referência de desenvolvedor configChanges para obter mais detalhes.
No entanto, seu aplicativo pode ser interrompido a qualquer momento, por exemplo, por uma ligação telefônica, portanto, você deve adicionar um código para salvar o estado do seu aplicativo quando ele estiver em pausa.
Atualização: no Android 3.2, você também precisa adicionar "screenSize":
Do guia do desenvolvedor Manipulando a alteração de configuração você mesmo
fonte
Você precisa modificar o AndroidManifest.xml como as Intrications (anteriormente Ashton) mencionadas e garantir que a atividade lide com o evento onConfigurationChanged como desejar. É assim que deve parecer:
fonte
setRequestedOrientation()
inonCreate()
.onConfigurationChanged()
chamado antesonCreate()
se definir a orientação antes de definir o contentViews no oncreate é uma abordagem melhor , definir a configuração onde ele pertence também é mais limpo, portanto essa resposta ainda permanece boa.Eu sempre achei que você precisava dos dois
fonte
Como dito, defina
android:configChanges
sua Atividade (no arquivo de manifesto) parakeyboardHidden|orientation
e depois:1) Substituir
onConfigurationChanged()
2) Adicione esta linha às suas atividades
onCreate()
É melhor do que adicionar a mesma linha
onConfigurationChanged
, porque seu aplicativo passará para o modo retrato e depois voltará para o modo paisagem (isso acontecerá apenas uma vez, mas é irritante).Além disso, você pode definir
android:screenOrientation="nosensor"
sua atividade (no manifesto). Mas, dessa maneira, você não consegue lidar com as alterações de orientação.fonte
Usa isto..
fonte
No método OnCreate da sua atividade, use este código:
Agora sua orientação será configurada para retrato e nunca será alterada.
fonte
No arquivo AndroidManifest.xml, para cada atividade que você deseja bloquear, adicione a última
screenOrientation
linha:Ou android: screenOrientation = "paisagem" .
fonte
No seu arquivo androidmanifest.xml :
ou
fonte
Para bloquear a tela por código, você deve usar a rotação real da tela (0, 90, 180, 270) e saber a posição natural dela; em um smartphone, a posição natural será retrato e em um tablet, será paisagem.
Aqui está o código (métodos de bloqueio e desbloqueio), ele foi testado em alguns dispositivos (smartphones e tablets) e funciona muito bem.
fonte
No Visual Studio Xamarin:
using Android.Content.PM;
para sua lista de namespace de atividades.[Activity(ScreenOrientation = Android.Content.PM.ScreenOrientation.Portrait)]
como um atributo para sua classe, assim:
fonte
Adicionar
para o seu manifesto.
fonte
Observe que nenhum dos métodos parece funcionar agora!
No Android Studio 1, uma maneira simples é adicionar
android:screenOrientation="nosensor"
.Isso efetivamente bloqueia a orientação da tela.
fonte