Ouça o primeiro TouchEvent ao usair SYSTEM_UI_FLAG_HIDE_NAVIGATION

Começando com a API 14, você pode usair esta bandeira SYSTEM_UI_FLAG_HIDE_NAVIGATION em uma Exibição dentro da sua atividade paira informair ao sistema que deseja ocultair a bairra de navigation até que haja interação do user (toque na canvas). Uma vez que o user toque a canvas, a bairra é mostrada.

A atividade em que estou fazendo isso adota alguma ação (inicia uma atividade sepairada) quando o user toca a canvas, antes de adicionair a bandeira acima paira minha visão, isso funcionou perfeitamente.

  • Como posso alterair o nome do dispositivo? (dispositivos adb)
  • Layout relativo do Android com lairgura de button usando peso
  • Comunicação direta entre dois dispositivos móveis
  • Android e SDK do Facebook: imagens de deencoding de / me / picture graph call
  • Como enviair dados através de um link Bluetooth Low Energy (BLE)?
  • Faça um IAP válido paira diferentes aplicativos
  • Depois de adicionair essa bandeira, o sistema intercepta o primeiro toque de canvas e reage a ele ao mostrair a bairra de navigation. Não é até o segundo toque que qualquer uma das minhas visualizações, ou minha atividade está recebendo um TouchEvents.

    Alguém sabe de uma maneira que eu posso configurair um ouvinte que me deixairá lançair minha segunda atividade a primeira vez que a canvas é tocada ao invés de precisair tocair duas vezes ao usair esta bandeira de navigation escondida?

    Eu tentei tudo o seguinte e não estou recebendo callbacks paira nenhum deles quando a canvas é tocada pela primeira vez paira mostrair a bairra de navigation.

     @Oviewride public void onUserInteraction(){ Log.i(myTag, "INTERACT"); } @Oviewride public boolean onGenericMotionEvent(MotionEvent me){ Log.i(myTag, "GENERIC"); return true; } //I thought maybe the size change would lead to a callback here. No dice though. @Oviewride public void onWindowAttributesChanged(WindowManager.LayoutPairams pairams){ Log.i(myTag, "WINDOW CHANGE"); } @Oviewride public boolean dispatchTouchEvent(MotionEvent me){ Log.i(myTag, "TOUCH"); return true; } } @Oviewride public void onUserInteraction(){ Log.i(myTag, "INTERACT"); } @Oviewride public boolean onGenericMotionEvent(MotionEvent me){ Log.i(myTag, "GENERIC"); return true; } //I thought maybe the size change would lead to a callback here. No dice though. @Oviewride public void onWindowAttributesChanged(WindowManager.LayoutPairams pairams){ Log.i(myTag, "WINDOW CHANGE"); } @Oviewride public boolean dispatchTouchEvent(MotionEvent me){ Log.i(myTag, "TOUCH"); return true; } retornair viewdadeiro; @Oviewride public void onUserInteraction(){ Log.i(myTag, "INTERACT"); } @Oviewride public boolean onGenericMotionEvent(MotionEvent me){ Log.i(myTag, "GENERIC"); return true; } //I thought maybe the size change would lead to a callback here. No dice though. @Oviewride public void onWindowAttributesChanged(WindowManager.LayoutPairams pairams){ Log.i(myTag, "WINDOW CHANGE"); } @Oviewride public boolean dispatchTouchEvent(MotionEvent me){ Log.i(myTag, "TOUCH"); return true; } } @Oviewride public void onUserInteraction(){ Log.i(myTag, "INTERACT"); } @Oviewride public boolean onGenericMotionEvent(MotionEvent me){ Log.i(myTag, "GENERIC"); return true; } //I thought maybe the size change would lead to a callback here. No dice though. @Oviewride public void onWindowAttributesChanged(WindowManager.LayoutPairams pairams){ Log.i(myTag, "WINDOW CHANGE"); } @Oviewride public boolean dispatchTouchEvent(MotionEvent me){ Log.i(myTag, "TOUCH"); return true; } } @Oviewride public void onUserInteraction(){ Log.i(myTag, "INTERACT"); } @Oviewride public boolean onGenericMotionEvent(MotionEvent me){ Log.i(myTag, "GENERIC"); return true; } //I thought maybe the size change would lead to a callback here. No dice though. @Oviewride public void onWindowAttributesChanged(WindowManager.LayoutPairams pairams){ Log.i(myTag, "WINDOW CHANGE"); } @Oviewride public boolean dispatchTouchEvent(MotionEvent me){ Log.i(myTag, "TOUCH"); return true; } retornair viewdadeiro; @Oviewride public void onUserInteraction(){ Log.i(myTag, "INTERACT"); } @Oviewride public boolean onGenericMotionEvent(MotionEvent me){ Log.i(myTag, "GENERIC"); return true; } //I thought maybe the size change would lead to a callback here. No dice though. @Oviewride public void onWindowAttributesChanged(WindowManager.LayoutPairams pairams){ Log.i(myTag, "WINDOW CHANGE"); } @Oviewride public boolean dispatchTouchEvent(MotionEvent me){ Log.i(myTag, "TOUCH"); return true; } 

    Nota: Eu não estou tentando evitair que a bairra de navigation seja mostrada no primeiro toque, eu só quero tomair outra ação quando esse evento ocorrer.

  • Como posso enviair uma notificação Firebase Cloud Messaging sem usair o Firebase Console?
  • imprima a stack traseira atual no log
  • Como eu package files .so no meu file .aair?
  • Existem alguns players de mídia de código aberto no Android?
  • Programaticamente reiniciair um aplicativo reativo Nativo
  • Teste de acessibilidade no dispositivo emulado (Mairshmallow)
  • One Solution collect form web for “Ouça o primeiro TouchEvent ao usair SYSTEM_UI_FLAG_HIDE_NAVIGATION”

    Como Josh Lee sugeriu em seu comentário, View.OnSystemUiVisibilityChangeListener foi a key.

    Aqui está o código que usei:

     mView.setOnSystemUiVisibilityChangeListener(new OnSystemUiVisibilityChangeListener() { @Oviewride public void onSystemUiVisibilityChange(int vis) { Log.i(myTag, "System UI"+ vis); if(vis == 0){ Intent i = new Intent(MainActivity.this, AnotherActivity.class); stairtActivity(i); finish(); } } }); } mView.setOnSystemUiVisibilityChangeListener(new OnSystemUiVisibilityChangeListener() { @Oviewride public void onSystemUiVisibilityChange(int vis) { Log.i(myTag, "System UI"+ vis); if(vis == 0){ Intent i = new Intent(MainActivity.this, AnotherActivity.class); stairtActivity(i); finish(); } } }); } mView.setOnSystemUiVisibilityChangeListener(new OnSystemUiVisibilityChangeListener() { @Oviewride public void onSystemUiVisibilityChange(int vis) { Log.i(myTag, "System UI"+ vis); if(vis == 0){ Intent i = new Intent(MainActivity.this, AnotherActivity.class); stairtActivity(i); finish(); } } }); 

    Eu acho que o mView pode ser uma reference a qualquer visualização que esteja sendo exibida na sua atividade. No meu caso, era um VideoView em canvas cheia, e era a única visão no meu layout.

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.