2015-11-11 14 views
5

Sto creando un'app in cui viene visualizzata una finestra di avviso quando si preme un determinato pulsante. La barra di stato deve essere nascosta, quindi ho un metodo nella mia attività:Barra di stato nascosta durante la visualizzazione di Alert Dialog Android

private void hideStatusBar(){ 
    if (Build.VERSION.SDK_INT < 16){ 
     getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
       WindowManager.LayoutParams.FLAG_FULLSCREEN); 
    } 
    else { 
     View decorView = getWindow().getDecorView(); 
     int uiOptions = View.SYSTEM_UI_FLAG_FULLSCREEN; 
     decorView.setSystemUiVisibility(uiOptions); 
    } 
} 

chiamo questo metodo nel metodo di onCreate della propria attività, e funziona bene fino a quando la finestra di avviso si apre. Non appena viene visualizzata la finestra di avviso, la barra di stato ritorna. Ho provato quanto segue:

alertDialog.show(); 
hideStatusBar(); 

che non ha fatto work.Then ho calpestato il metodo onWindowFocusChanged per la mia attività:

public void onWindowFocusChanged(boolean hasFocus) { 
    super.onWindowFocusChanged(hasFocus); 
    hideStatusBar(); 
} 

che rende lo sfondo della barra di stato trasparente, ma ancora non lo fa nascondilo. C'è un modo per tenere nascosta la barra di stato quando viene visualizzata la finestra di avviso?

+0

Hai chiamato il metodo hidestatusbar() prima di mostrare dialogo? – Arslan

+0

Sì, ho provato a chiamare hidestatusbar() prima di chiamare alertDialog.show(), ma anche questo non ha fatto nulla – Thomas

+0

hai fatto un tentativo usando lo stile personalizzato per le finestre di dialogo? o impostare i parametri di altezza e larghezza? – Arslan

risposta

-1

Prova questo,

final Dialog dialog = new Dialog(context); 
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); 
dialog.setContentView(R.layout.activity_no_title_dialog); 
dialog.show(); 
+0

titolo? autore ha detto statusbar https://developer.android.com/training/system-ui/status.html – user25

1

Ogni finestra ha una sua finestra, che ha un proprio stile.

Nel tuo caso hideStatusBar() non funziona perché è chiamato da attività onCreate() significa che tenta di modificare l'aspetto della finestra dell'attività, ma non la finestra di dialogo.

La soluzione è:

sottoclasse AlertDialog. Spostarsi lì hideStatusBar() e chiamarlo dalla finestra di dialogo onCreate().

significa che hai di avere un accordo con Dialog.getWindow() piuttosto Activity.getWindow()

Ecco un piccolo esempio:

public static class TranslucentDialog extends AlertDialog { 
    ... 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); 
    } 
}