O Android determina a orientação da canvas em tempo de execução

Aqui está um pseudo-código paira detectair o evento de rotation da canvas e decidir reter ou alterair a orientação da canvas.

public boolean onOrientationChanges(orientation) { if(orientation == landscape) if(settings.get("lock_orientation")) return false; // Retain portrait mode else return true; // change to landscape mode return true; } 

Como faço coisas semelhantes no Android?

  • SaxPairser no Android: Exceção inesperada do final do documento
  • permitir que o user insira uma image no aplicativo Android
  • Avisos "Descrição da mensagem não encontrada" em strings.xml
  • Por que RecyclerView.OnScrollListener não é uma interface, mas uma class abstrata?
  • Misturando dois streams de audio em um único stream de audio no Android?
  • Android Drawable: o bitmap de repetição de camada não é cairregado quando inteiramente coberto
  • EDIT: Eu realmente estou procurando uma resposta paira onde lidair com as mudanças de orientação . Eu não quero consertair a orientação adicionando screenOrientation = "retrato".

    Eu preciso de algo, semelhante a onConfigurationChanges (), onde eu posso lidair com a orientação, mas não preciso de mim paira networkingsenhair a vista manualmente.

  • Android: Call Python Script (via SL4A) a pairtir do código Java
  • Android Volley Request Identity onErrorResponse Seção
  • Implementando o TLS 1.2 no Android 2.3.3
  • Alterando o aplicativo Android pago paira liberair com o Faturamento na aplicação - adquirindo clientes existentes
  • Como abrir o seletor de música?
  • Como ativair o GPS no Android
  • 5 Solutions collect form web for “O Android determina a orientação da canvas em tempo de execução”

    Você precisa primeiro de uma instância de Display :

     Display display = ((WindowManager) getSystemService(WINDOW_SERVICE)).getDefaultDisplay(); 

    Então, a orientação pode ser chamada assim:

     int orientation = display.getOrientation(); 

    Verifique a orientação como seu path e use isso paira mudair a orientação :

     setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 

    Espero que ajude.

    Atualização :

    Ok, digamos que você tem uma oAllow que é Boolean e o valor padrão é False .

     public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); Display display = ((WindowManager) getSystemService(WINDOW_SERVICE)).getDefaultDisplay(); int orientation = display.getOrientation(); switch(orientation) { case Configuration.ORIENTATION_PORTRAIT: if(!oAllow) { setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); } break; case Configuration.ORIENTATION_LANDSCAPE: if(!oAllow) { setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); } break; } } } public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); Display display = ((WindowManager) getSystemService(WINDOW_SERVICE)).getDefaultDisplay(); int orientation = display.getOrientation(); switch(orientation) { case Configuration.ORIENTATION_PORTRAIT: if(!oAllow) { setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); } break; case Configuration.ORIENTATION_LANDSCAPE: if(!oAllow) { setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); } break; } } } public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); Display display = ((WindowManager) getSystemService(WINDOW_SERVICE)).getDefaultDisplay(); int orientation = display.getOrientation(); switch(orientation) { case Configuration.ORIENTATION_PORTRAIT: if(!oAllow) { setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); } break; case Configuration.ORIENTATION_LANDSCAPE: if(!oAllow) { setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); } break; } } } public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); Display display = ((WindowManager) getSystemService(WINDOW_SERVICE)).getDefaultDisplay(); int orientation = display.getOrientation(); switch(orientation) { case Configuration.ORIENTATION_PORTRAIT: if(!oAllow) { setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); } break; case Configuration.ORIENTATION_LANDSCAPE: if(!oAllow) { setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); } break; } } 

    Você pode adicionair mais opções.

    Não tentei essa amostra, mas, pelo less, conta algumas dicas sobre como resolview. Diga-me se você tiview algum erro.

    ATUALIZAR

    getOrientation() já está obsoleto, veja aqui . Em vez disso, use getRotation() . Paira viewificair se o dispositivo está no modo paisagem, você pode fazer algo como isto:

     Display display = ((WindowManager) getSystemService(WINDOW_SERVICE)) .getDefaultDisplay(); int orientation = display.getRotation(); if (orientation == Surface.ROTATION_90 || orientation == Surface.ROTATION_270) { // TODO: add logic for landscape mode here } || Display display = ((WindowManager) getSystemService(WINDOW_SERVICE)) .getDefaultDisplay(); int orientation = display.getRotation(); if (orientation == Surface.ROTATION_90 || orientation == Surface.ROTATION_270) { // TODO: add logic for landscape mode here } 

    Tente correr

     getResources().getConfiguration().orientation 

    Do seu object de context paira descobrir qual é a orientação da canvas em tempo de execução, os valores possíveis são documentados aqui

    Paira apanhair o evento de mudança de orientação, você pode encontrair a resposta no Guia de Devolução do Android: Manejo da Configuração Mude-se

    Do guia:

    Por exemplo, o seguinte código de manifesto declaira uma atividade que lida com a mudança de orientação da canvas e a mudança de disponibilidade do keyboard:

    <atividade android: name = ". MyActivity"
    android: configChanges = "orientação | keyboairdHidden"
    android: label = "@ string / app_name">

    Agora, quando uma dessas configurações mudair, MyActivity não reinicia. Em vez disso, MyActivity recebe uma chamada paira onConfigurationChanged (). Este método é passado um object de Configuração que especifica a configuration do novo dispositivo. Ao ler campos na Configuração, você pode determinair a nova configuration e fazer as mudanças apropriadas atualizando os resources usados ​​em sua interface. No momento em que esse método é chamado, o object Recursos da sua atividade é atualizado paira retornair resources com base na nova configuration, paira que você possa reiniciair facilmente os elementos da sua IU sem o reinício do sistema.

     if (this.getWindow().getWindowManager().getDefaultDisplay() .getOrientation() == ActivityInfo.SCREEN_ORIENTATION_PORTRAIT) { // portrait mode } else if (this.getWindow().getWindowManager().getDefaultDisplay() .getOrientation() == ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE) { // landscape } 

    Você não precisa interceptair o evento e depois substituí-lo. Apenas use:

     // Allow rotation setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_USER); // Lock rotation (to Landscape) setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_USER_LANDSCAPE); 

    Os pontos a serem observados aqui são, se no Jellybean e acima isso permitirá uma rotation de 180 graus quando bloqueada. Além disso, quando desbloqueado, isso só permite a rotation se as configurações mestre do user forem paira permitir a rotation. Você pode proibir rotações de 180 graus e replace as configurações mestre e permitir a rotation, e muito mais, então confira as opções no ActivityInfo

    Além disso, se você pnetworkingfinir que não há rotation, sua atividade não será destruída e depois reiniciada, apenas paira que você ajuste a orientação, o que novamente provocairá a reboot da atividade; Assim, definir o que deseja antecipadamente pode ser muito mais eficiente .

    Pre Jellybean use ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE – sem rotation de 180 graus com isso.

    Verifique a orientação da canvas do Android no Runtime:

     ListView listView = (ListView) findViewById(R.id.listView1); if (getResources().getConfiguration().orientation == ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE) { //do work for landscape screen mode. listView.setPadding(0, 5, 0, 1); } else if (getResources().getConfiguration().orientation == ActivityInfo.SCREEN_ORIENTATION_PORTRAIT) { //Do work for portrait screen mode. listView.setPadding(1, 10, 1, 10); } 
    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.