it-swarm.com.de

Verwenden des neuen IMMERSIVE-Modus in Android Kitkat

Ich möchte eine Aktivität ausführen, um in den IMMERSIVE-Modus zu gelangen und die oberen und unteren Systemleisten beim Start zu verbergen.

In der Entwickler-Site von Android sagen sie, ich sollte setSystemUiVisibility() verwenden und SYSTEM_UI_FLAG_IMMERSIVE und SYSTEM_UI_FLAG_HIDE_NAVIGATION angeben.

Wie kann ich dies in der OnCreate()-Methode der Aktivität tun? Ich denke, dass setSystemUiVisibility nicht in der Activity-Klasse enthalten ist und in einer Ansicht vorkommen sollte. Gibt es eine Problemumgehung?

UPDATE

ok Laut Doorstuck habe ich die folgenden Zeilen hinzugefügt, aber ich sehe keine Änderungen. Die Navigationsleiste und die Schaltflächen sind noch sichtbar:

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        if (savedInstanceState == null) {
        }
        getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);
        getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_IMMERSIVE);
    }

    //Rest of activity code
20
Saeid Yazdani

Holen Sie sich die Dekoransicht:

getWindow().getDecorView().setSystemUiVisibility(...)

Denken Sie daran, dass die Argumente Bitflags sind. Rufen Sie die Methode nur einmal auf:

getWindow().getDecorView().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
        | View.SYSTEM_UI_FLAG_FULLSCREEN
        | View.SYSTEM_UI_FLAG_IMMERSIVE);
44
doorstuck

Chris Banes Gist zeigt eine Nice Helper-Klasse, mit der wir den Immersionsmodus für alle Versionen von HoneyComb bis Lollipop https://Gist.github.com/chrisbanes/73de18faffca571f7292 einstellen können. 

Update: Ich habe versucht, es von seinem Github-Repo in mein Projekt aufzunehmen, aber ich musste die Gist-Dateien in mein Projekt klonen und den Paketnamen anpassen. Wenn jemand weiß, wie er es als Abhängigkeit richtig einbezieht, können Sie mir gerne helfen.

Ich habe es in meine FullScreenActivity aufgenommen. Ich möchte den ImmersiveStickyMode wie folgt verwenden:

@Override
public void onWindowFocusChanged(boolean hasFocus) {
    super.onWindowFocusChanged(hasFocus);

        final int flags = 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
                | View.SYSTEM_UI_FLAG_FULLSCREEN
                | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;

        SystemUiHelper uiHelper =  new SystemUiHelper(this, SystemUiHelper.LEVEL_IMMERSIVE ,flags);
        uiHelper.hide();



}
5
swisscoder

Sie können globale Funktionen erstellen, um in den immersiven Modus zu wechseln, z.

public static void enableImmersiveMode(final View decorView) {
        decorView.setSystemUiVisibility(setSystemUiVisibility());
        decorView.setOnSystemUiVisibilityChangeListener(new View.OnSystemUiVisibilityChangeListener() {
            @Override
            public void onSystemUiVisibilityChange(int visibility) {
                if ((visibility & View.SYSTEM_UI_FLAG_FULLSCREEN) == 0) {
                    decorView.setSystemUiVisibility(setSystemUiVisibility());
                }
            }
        });
    }


public static int setSystemUiVisibility() {
        return 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
                | View.SYSTEM_UI_FLAG_FULLSCREEN
                | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;
 }

Der obige Code steuert auch die Sichtbarkeitsänderung der System-Benutzeroberfläche. Hoffe, das wird dir helfen.

2
Rahul Parihar

Viel schöner und Dank an William J. Francis :

   public class GameActivity extends Activity{

    @Override
    protected void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        /* my code you dont need this
        assets=getAssets();
        sGame= new GameView(this, GAME_WIDTH, GAME_HEIGHT);
        setContentView(sGame);  
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
        */


        getWindow().getDecorView().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_STICKY);
    }

@Override         
protected void onDoSomethingOtherImportantThing(){
...
}



}

Die Antwort wurde bereits gegeben, aber hier ist So verwenden Sie den Immersive-Modus.

In Ihrer Aktivität:

kurz vor setContentview () .......

rufen Sie die Methode auf: toggleHideyBar ();

Folgen Sie der Dokumentation Dokumentation von Developer Android und kopieren Sie diese Methode in Ihre Aktivität.

0
sud007

Android: immersive = "true" blendet die unteren Systemleisten aus

<application> 
 <activity
        Android:name=".CarrierActivity"
        Android:label="@string/app_name"
        Android:excludeFromRecents="true"
        Android:immersive="true"
        Android:configChanges="orientation|keyboardHidden|screenSize">
        <intent-filter>
         <action Android:name="com.example.SetupWiz.SUW_CARRIER"/>
         <category Android:name="Android.intent.category.DEFAULT" />
       </intent-filter>
    </activity>
</application>  
0
anand krish