2011-10-06 37 views
5

Passare da schermo intero a schermo intero con Android funziona correttamente. Tuttavia, al ritorno dalla mia attività a schermo intero (un video player a schermo intero), l'attività scatta verso il basso mentre la barra di stato si anima. Sembra che l'attività di ripresa sia animata dalla modalità a schermo intero, ma con la barra di stato non c'è l'attività effettiva che viene dipinta come se fosse mancante.Passaggio da schermo intero a non intero schermo pop/slide

Ho provato a fare scherzi con il mio file manifest specificando temi/stili. Ho provato a fare questo a livello di codice in onCreate() prima della visualizzazione del contenuto è impostato e vari altri luoghi del ciclo di vita di attività:

getWindow().addFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN); 
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); 

Sembra che non v'è alcun modo per mantenere la barra di stato da animare il basso e/o dalla vista del contenuto dal primo disegno senza la barra di stato lì e quindi regolando verso il basso come viene mostrato nuovamente.

Qualcuno ha qualche idea al riguardo? Non sono sicuro se c'è un modo per cambiare questo ed è solo un comportamento di Android.

Grazie in anticipo.

risposta

1

Nella vista radice del layout dell'attività aggiungere

android: paddingTop = "25dp"

Nel onCreate dell'attività, prima della setContentView() inserirlo

getWindow().addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN); 
getWindow().addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS); 
2
private void toggleFullscreen(boolean fullscreen) 
{ 
    WindowManager.LayoutParams attrs = getWindow().getAttributes(); 
    if (fullscreen) 
    { 
     attrs.flags |= WindowManager.LayoutParams.FLAG_FULLSCREEN; 
    } 
    else 
    { 
     attrs.flags &= ~WindowManager.LayoutParams.FLAG_FULLSCREEN; 
    } 
    getWindow().setAttributes(attrs); 
} 

Utilizzare questo funzionerà sicuramente

0

Sono riuscito a ottenere questo in due passaggi.

  1. Usa Theme.AppCompat.Light.NoActionBar nei miei stili per l'attività che voglio mostrare come schermo intero. .

  2. Utilizza il codice qui sotto nel metodo della attività onCreate(Bundle savedInstanceState) attributi WindowManager.LayoutParams = getWindow() getAttributes(); attributes.flags | = WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN | WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS; getWindow(). SetAttributes (attributi);

Spero che questo aiuti. Felice di codifica :)

1

seguito è la mia soluzione:

Mostra la barra di stato del sistema prima di terminare la piena attività dello schermo

@Override 
public void onBackPressed() { 
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN, WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN); 

    mUIHandler.post(new Runnable() { 
     @Override 
     public void run() { 
      MyFullScreenActivity.super.onBackPressed(); 
     } 
    }); 
} 
+0

questa soluzione è stata più utile per me perché non ha causato l'attività originale di dover regolare il riempimento del layout. –

0

Non so se questo funzionerà per voi, ma ha funzionato per me. impostare l'attività di schermo intero:

getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN); 
setContentView(R.layout.my_screen); 

spegnere schermo intero:

WindowManager.LayoutParams attrs = getWindow().getAttributes(); 
attrs.flags |= WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN | WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS; 
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); 
getWindow().setAttributes(attrs); 
startActivity(new Intent(getBaseContext(),NewActivity.class)); 
finish(); 
1

Ecco il modo migliore per eliminare questo problema:

private void setFullscreen(boolean fullscreen) { 
    WindowManager.LayoutParams attrs = getWindow().getAttributes(); 
    if (fullscreen) { 
     attrs.flags |= WindowManager.LayoutParams.FLAG_FULLSCREEN; 
     attrs.flags |= WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN; 
     attrs.flags |= WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS; 
    } 
    else { 
     attrs.flags &= ~WindowManager.LayoutParams.FLAG_FULLSCREEN; 
     attrs.flags &= ~WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN; 
     attrs.flags &= ~WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS; 
    } 
    getWindow().setAttributes(attrs); 
} 

chiamata prima super.onCreate(...) all'interno della vostra attività.