2012-08-01 21 views
17

Comenzando con API 14 puede usar este indicador SYSTEM_UI_FLAG_HIDE_NAVIGATION en una vista dentro de su actividad para decirle al sistema que desea ocultar la barra de navegación hasta que haya interacción del usuario (pantalla táctil). Una vez que el usuario toca la pantalla, se muestra la barra.Escuche el primer evento TouchEvent al usar SYSTEM_UI_FLAG_HIDE_NAVIGATION

la actividad que estoy haciendo esto en toma alguna acción (se inicia una actividad separada) cuando el usuario toca la pantalla, antes de añadir la bandera arriba para mi opinión, esto funcionó a la perfección.

Después de añadir que la bandera el sistema intercepta la primera pantalla táctil y reacciona a ella, mostrando la barra de navegación. No es hasta el segundo toque que cualquiera de mis Vistas o mi Actividad están recibiendo un TouchEvents.

¿Alguien sabe de alguna manera que pueda configurar un oyente que me permita iniciar mi segunda actividad la primera vez que se toca la pantalla en lugar de tener que tocar dos veces al usar esta bandera de navegación oculta?

He intentado todo lo siguiente y ahora no recibo devoluciones de llamada a cualquiera de ellos cuando se toca la pantalla por primera vez para mostrar la barra de navegación.

@Override 
public void onUserInteraction(){ 
    Log.i(myTag, "INTERACT"); 
} 

@Override 
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. 
@Override 
public void onWindowAttributesChanged(WindowManager.LayoutParams params){ 
    Log.i(myTag, "WINDOW CHANGE"); 
} 
@Override 
public boolean dispatchTouchEvent(MotionEvent me){ 
    Log.i(myTag, "TOUCH"); 
    return true; 
} 

Nota: No estoy tratando de prevenir la barra de navegación de ser mostrado en el primer toque, sólo quiero también tomar alguna otra acción cuando se produce el evento.

+7

¿Has probado ['View.OnSystemUiVisibilityChangeListener'] (http://developer.android.com/reference/android/view/View.OnSystemUiVisibilityChangeListener.html)? –

+0

@JoshLee ¡No lo tenía y eso funciona! Muchas gracias. Publique eso como respuesta si quiere, así puedo aceptarlo. – FoamyGuy

Respuesta

7

Como Josh Lee sugirió en su comentario, View.OnSystemUiVisibilityChangeListener fue la clave.

Este es el código que he utilizado:

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

creo que mView podría ser una referencia a cualquier punto de vista que se muestra actualmente en su actividad. En mi caso, era una VideoView a pantalla completa, y era la única vista en mi diseño.

Cuestiones relacionadas