2011-01-10 10 views

risposta

4

È possibile capire se lo Activity è in esecuzione a schermo intero tramite getWindow().getFlags().

Tuttavia, se per "un'applicazione" si fa riferimento all'applicazione di qualcun altro, la risposta è no.

0

Activity.hasWindowFocus() indica se la propria attività è visibile all'utente. Ma, come nota CommonsWare, è molto più difficile capire se un'altra attività è in cima alla pila. Puoi provare a interrogare lo ActivityManager (ad esempio, ActivityManager.getProcessTasks()), ma i suoi metodi non forniscono una risposta esatta alla tua domanda.

0

è possibile utilizzare alcune cose come questa;

findViewById(android.R.id.content).getHeight(); 
    getResources().getDisplayMetrics().heightPixels; 

e verificare l'uguaglianza; spero che questo aiuti;

9

Immagino che Commonsware volesse dire getWindow(). GetAttributes() e non getWindow(). GetFlags(); dato che getFlags non esiste per quanto ne so. Almeno non è in doc.

è necessario leggere getWindow(). GetAttributes(). Flags, che è un int.

 
WindowManager.LayoutParams lp = getWindow().getAttributes(); 
int i = lp.flags; 

FLAG_FULLSCREEN = 1024 secondo la documentazione di Android. quindi la tua bandiera è l'undicesimo morso di lp.flags

se questo morso = 1, lo schermo intero è attivato.

9

Giusto per completare il Sigwann risposta:

boolean fullScreen = (getWindow().getAttributes().flags & WindowManager.LayoutParams.FLAG_FULLSCREEN) != 0; 
boolean forceNotFullScreen = (getWindow().getAttributes().flags & WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN) != 0; 
boolean actionbarVisible = getActionBar().isShowing(); 
+3

Worth facendo attenzione sull'ultima riga lì con la getActionBar() isShowing() - se hai disattivato la barra delle operazioni nel tema piuttosto che nasconderlo, quindi getActionBar() può restituire. nullo. – themightyjon

2

Dal api11 ora c'è un modo per rilevare che l'utilizzo di una documentazione di interfaccia View.setOnSystemUiVisibilityChangeListener

L'ascoltatore osserva quanto segue:

Definizione dell'interfaccia per la richiamata da richiamare quando la barra di stato cambia visibilità. Questo segnala globale modifiche allo stato dell'interfaccia utente del sistema, non ciò che l'applicazione richiede.

Non so se c'è un modo per farlo prima di Honeycomb.

5

seguito le informazioni di Sigwann, ecco il mio codice ....

public boolean isFullScreen() { 
    int flg = getWindow().getAttributes().flags; 
    boolean flag = false;  
    if ((flg & WindowManager.LayoutParams.FLAG_FULLSCREEN) == WindowManager.LayoutParams.FLAG_FULLSCREEN) { 
     flag = true; 
    } 
    return flag; 
} 

semplici, ma funziona!

+1

Cosa significa questo numero magico 1024? –

+0

È solo un modo binario di dare un numero con molti 0 – Alecs

+0

Ancora è il numero magico. Meglio usare: WindowManager.LayoutParams.FLAG_FULLSCREEN –

0

C'è un bel trucco, utilizzando la posizione assoluta di uno View sullo schermo. Basta controllare la posizione di qualsiasi vista in alto a sinistra del layout (può essere invisibile), se è in posizione 0,0.Come questo:

/** 
* Check if fullscreen is activated by a position of a top left View 
* @param topLeftView View which position will be compared with 0,0 
* @return 
*/ 
public static boolean isFullscreen(View topLeftView) { 
    int location[] = new int[2]; 
    topLeftView.getLocationOnScreen(location); 
    return location[0] == 0 && location[1] == 0; 
} 
Problemi correlati