2012-08-01 9 views
17

A partire dall'API 14 è possibile utilizzare questo flag SYSTEM_UI_FLAG_HIDE_NAVIGATION in una vista all'interno dell'attività per indicare al sistema che si desidera nascondere la barra di navigazione fino all'interazione dell'utente (tocco dello schermo). Una volta che l'utente tocca lo schermo, viene mostrata la barra.Ascolta per primo TouchEvent quando si utilizza SYSTEM_UI_FLAG_HIDE_NAVIGATION

L'attività in cui sto svolgendo richiede un'azione (inizia un'attività separata) quando l'utente tocca lo schermo, prima di aggiungere la bandiera sopra alla mia vista ha funzionato perfettamente.

Dopo aver aggiunto questo flag il sistema intercetta il primo tocco dello schermo e reagisce visualizzando la barra di navigazione. Non è fino al secondo tocco che una delle mie visualizzazioni o la mia attività ricevono un TouchEvents.

Qualcuno sa di un modo in cui posso impostare un listener che mi consentirà di avviare la mia seconda attività la prima volta che lo schermo viene toccato invece di dover fare doppio tap quando si utilizza questa bandiera di Nascondi Nav?

Ho provato tutto quanto segue e non ricevo i callback a nessuno di essi quando lo schermo viene toccato per la prima volta per mostrare la barra di navigazione.

@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: Non sto cercando di evitare che la barra di navigazione vengano visualizzati sul primo tocco, voglio solo prendere anche qualche altra azione quando si verifica tale evento.

+7

Hai provato ['View.OnSystemUiVisibilityChangeListener'] (http://developer.android.com/reference/android/view/View.OnSystemUiVisibilityChangeListener.html)? –

+0

@JoshLee Non l'ho fatto e questo funziona! Grazie molto. Pubblicalo come risposta se vuoi, quindi posso accettarlo. – FoamyGuy

risposta

7

Come suggerito da Josh Lee nel suo commento, View.OnSystemUiVisibilityChangeListener era la chiave.

Ecco il codice che ho usato:

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(); 
     } 
    } 
}); 

penso che mView potrebbe essere un riferimento a qualsiasi visualizzazione che è attualmente in mostra nella vostra attività. Nel mio caso si trattava di una visualizzazione a schermo intero, ed era l'unica vista nel mio layout.