2016-08-06 2 views
0

Ich bin auf dem Android-Entwickler Tutorial arbeiten „Using Immersive Full-Screen ModeWie wird diese Codezeile in Java (Android) ausgewertet?

Alles war in Ordnung, bis ich diesen Code-Schnipsel gefunden.

private void hideSystemUI() { 
    // Set the IMMERSIVE flag. 
    // Set the content to appear under the system bars so that the content 
    // doesn't resize when the system bars hide and show. 
    mDecorView.setSystemUiVisibility(
      View.SYSTEM_UI_FLAG_LAYOUT_STABLE 
      | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION 
      | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN 
      | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION // hide nav bar 
      | View.SYSTEM_UI_FLAG_FULLSCREEN // hide status bar 
      | View.SYSTEM_UI_FLAG_IMMERSIVE); 
} 

Ich bin ein wenig mit der setSystemUiVisibility(int) Methode verwirrte, weil ich weiß nicht, wie diese Bedingung ausgewertet wird.

Warum empfängt diese Methode mehrere ganzzahlige Werte?

Vielleicht ist es ein sehr einfaches Konzept über Java-Sprache, aber ich hatte es noch nie benutzt oder gesehen.

+1

Alle diese Werte werden zusammen ODER-verknüpft und dann als eine ganze Zahl an 'setSystemUiVisibility' übergeben. – markspace

Antwort

4

setSystemUiVisibility empfängt tatsächlich 1 Ganzzahl. Was Sie hier sehen, sind Bitflags. All diese View Konstanten, die Sie sehen, werden mit bitweisem oder kombiniert.

Die Idee ist, dass ein Flag ein Toggle darstellt: eine oder aus, 1 oder 0. Eine typische Art und Weise, dass die Darstellung mit einem boolean ist, die Werte true und false hat. Aber eine boolean belegt 4 Bytes (der Einfachheit halber), was 32 Bits ist. Nun, diese boolean könnte tatsächlich verwendet werden, um 32 verschiedene Flags dann mit 32 Orten für 1 oder 0 darzustellen! Gleiches mit einer Ganzzahl (der Größe 4 Bytes). Lassen Sie uns also eine Ganzzahl verwenden, um eine Reihe von Flags zu halten, und setzen Sie alle zuerst auf 0.

Wir haben dann die bitweise OR-Operator verwenden kann (| beachten, 1 bar, nicht mehr als 2), um festzulegen, welche Flag auf "wahr", wie so einzustellen Bit:

00000000 | 00100000 = 00100000 
00100000 | 00000001 = 00100001 

Die zweite Zahl zeigt, die Flagge wir wollen als wahr setzen. Jetzt haben die Variablen die Werte (von documentation):

View.SYSTEM_UI_FLAG_LAYOUT_STABLE   = 0x0100 = 0000 0001 0000 0000 
View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION = 0x0200 = 0000 0010 0000 0000 
View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN  = 0x0400 = 0000 0100 0000 0000 
View.SYSTEM_UI_FLAG_HIDE_NAVIGATION  = 0x0002 = 0000 0000 0000 0010 
View.SYSTEM_UI_FLAG_FULLSCREEN    = 0x0004 = 0000 0000 0000 0100 
View.SYSTEM_UI_FLAG_IMMERSIVE    = 0x0800 = 0000 1000 0000 0000 

Wenn man sie alle zusammen mit bitweise kombinieren oder Sie 0000 1111 0000 0110 erhalten = 0x0F06 = 3846.

Hinweis: Ich bin nicht repräsentieren 32 Bits für Einfachheit und Lesbarkeit. Alle Binärzahlen, die ich geschrieben habe, sollten führende Nullen haben. Falls das verwirrend war.

Verwandte Themen