So verstecken Sie die Statusleiste in Android


103

Ich habe auf diesen Link verwiesen . Wenn der Benutzer zu diesem Zeitpunkt auf EditText (z. B. To :) klickt, wird die Tastatur ausgeblendet, und gleichzeitig kann der Benutzer einen Bildlauf durchführen, um alle verbleibenden Ansichten (z. B. Verfassen, Betreff, Schaltfläche Senden) anzuzeigen dieser Bildschirm. Ebenso habe ich in meiner App eine Aktivität: Ich habe einige Widgets oder Ansichten. Angenommen, wenn der Benutzer auf Edittext klickt, der sich in meiner Aktivität befindet, springt die Tastatur heraus und ich kann scrollen, um die verbleibenden Ansichten anzuzeigen. Aber wenn ich dieses Attribut android:theme="@android:style/Theme.NoTitleBar.Fullscreen"im Manifest gebe, konnte ich nicht scrollen, um die verbleibenden Ansichten zu sehen, aber wenn ich Attribut gebeandroid:theme="@android:style/Theme.NoTitleBar"So im Manifest kann ich scrollen, um die verbleibende Ansicht zu sehen, aber es gibt eine Statusleiste in diesem Bildschirm. Hier möchte ich den Vollbildmodus und selbst wenn die Tastatur herausspringt, kann ich scrollen, um die verbleibenden Ansichten anzuzeigen. Welche Änderungen muss ich dafür vornehmen ..?


3
@ user448250: Beachten Sie, dass Sie die Statusleiste in Android 3.0 nicht ausblenden können und es eine gute Chance gibt, dass Sie die Statusleiste in Zukunft nicht mehr ausblenden können. In Android 3.0 enthält die Statusleiste die Schaltflächen ZURÜCK und STARTSEITE. Daher muss die Statusleiste immer verfügbar sein.
CommonsWare

Ich habe es gerade geschafft, sowohl den Titel als auch die Statusleiste auf dem Emulator mit 3.0, API Level 11
auszublenden

Der Vollbildmodus sollte weiterhin zulässig sein. Der Benutzer möchte normalerweise keine Statusleiste sehen, wenn er ein Vollbildspiel spielt.
GMsoF

@ user448250 Hast du das jemals herausgefunden?
Tiago

Was ist Aktivität überhaupt? Ist es eine XML-Datei in Ihrem Website-Ordner?
Nebular Dust

Antworten:


170

Schreiben Sie dies in Ihre Aktivität

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    requestWindowFeature(Window.FEATURE_NO_TITLE);
    this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
}

Überprüfen Sie das Dokument hier: https://developer.android.com/training/system-ui/status.html

und Ihre App wird im Vollbildmodus angezeigt. Keine Statusleiste, keine Titelleiste. :) :)


29
Beachten Sie, dass dies nicht funktioniert, wenn Ihre Aktivitäts-Superklasse setContentView in der onCreate-Methode aufruft. Die App wird mit einer Ausnahme beendet.
Ben Clayton

1
@ Ron Ich habe auf API-Ebene 8 getestet. Ist es möglich, dass das Verhalten auf anderen Ebenen anders ist?
Ben Clayton

Gilt dies für alle Versionen von 2.3.x bis 4.x?
Kostadin

1
Dies verhindert weiterhin, dass der Bildschirm gescrollt wird, wenn die Softwaretastatur angezeigt wird.
Tiago

2
Verwenden Sie es vorher, super.onCreate(savedInstanceState);wenn es abstürzt
David

19
 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);
      ActionBar actionBar = getActionBar();
      actionBar.hide();
 }

3
Ich habe festgestellt, dass bei Verwendung dieser Methode durch Anzeigen der Softtastatur die Ansichten über dem editText verschoben werden, anstatt die Größe zu ändern. Wie behebe ich das?
Android-Entwickler

19

Verwenden Sie das Thema "Theme.NoTitleBar.Fullscreen"und versuchen Sie es mit der Einstellung "android:windowSoftInputMode=adjustResize"für die Aktivität in. AndroidManifest.xml.Details finden Sie hier .


Mit dem oben beschriebenen Ansatz kann meine Statusleiste ausgeblendet werden, wenn die App im Vollbildmodus ausgeführt wird. Die Statusleiste wird jedoch weiterhin angezeigt, während ich über die Seite wische. Gibt es eine Möglichkeit, wenn ich die Statusleiste überhaupt nicht möchte?
Hazel Wang

13

Verwenden Sie diesen Code, um die Statusleiste in Ihrer App auszublenden und einfach zu verwenden

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

12

Wenn Sie dies in einer Aktivität benötigen, müssen Sie vor setContentView onCreate eingeben:

requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);

setContentView(R.layout.your_screen);

1
Auf diese Weise werden Tastatur-Eingabefelder in der Webansicht abgedeckt.
Allen Vork

@ AllenVork irgendeine Lösung?
Ishaan Kumar

12

Fügen Sie dies Ihrer Aktivitätsklasse hinzu

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    this.getWindow().setFlags(
                        WindowManager.LayoutParams.FLAG_FULLSCREEN, 
                        WindowManager.LayoutParams.FLAG_FULLSCREEN);
    setContentView(R.layout.activity_main);
    // some your code
}

8

Verwenden Sie dies für Ihre Activity.

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
}

6
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);
        }
    }

Mit dieser Methode können Sie die Statusleiste ausblenden. Und das ist wichtig, um auch die Aktionsleiste auszublenden. In diesem Fall können Sie getSupportActionBar (). Hide () erhalten, wenn Sie die Aktivität von support lib wie Appcompat erweitert haben, oder Sie können einfach getActionBar (). Hide () nach der oben genannten Methode aufrufen . Vielen Dank


6

Ändern Sie das Thema der Anwendung in der manifest.xmlDatei.

android:theme="@android:style/Theme.Translucent.NoTitleBar"

Seltsamerweise zeigt dies einen orangefarbenen Balken am oberen Bildschirmrand. Die Benachrichtigungsleiste ist jedoch ausgeblendet.
Dänischer Ashfaq

6

Wenn Sie die Statusleiste ausblenden, tun Sie dies in onCreate (für Aktivität) und onCreateView / onViewCreated (für Fragment).

getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);

Und vergessen Sie nicht, die Flagge zu löschen, wenn Sie die Aktivität beenden. Andernfalls wird nach dem Besuch dieser Aktivität der Vollbildmodus in Ihrer gesamten App angezeigt. Um dies zu löschen, tun Sie dies in Ihrem onDestroy (für Aktivität) oder onDestroyView (für Fragment).

getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN)

5

Verwenden Sie diesen Code:

requestWindowFeature(Window.FEATURE_NO_TITLE);
this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
super.onCreate(savedInstanceState);
setContentView(R.layout.youractivityxmlname);

4

Dieser Code verbirgt die Statusleiste.

getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);

Um die Aktionsleiste auszublenden, schreiben Sie diese Zeile: -

requestWindowFeature(Window.FEATURE_NO_TITLE);

Beide Zeilen können gemeinsam geschrieben werden, um die Aktionsleiste und die Statusleiste auszublenden. Alle diese Zeilen müssen vor dem setContentViewMethodenaufruf in onCreatemethod geschrieben werden.


Funktioniert wunderbar. Vielen Dank!
Joshua Pinter

3

Fügen Sie in AndroidManifest.xml -> innerhalb der Aktivität, die Sie verwenden möchten, Folgendes hinzu:

android:theme="@style/Theme.AppCompat.Light.NoActionBar"
//this is for hiding action bar

Fügen Sie in MainActivity.java -> in der onCreate () -Methode Folgendes hinzu:

this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
//this is for hiding status bar

3

Sie können mithilfe von styles.xml ausblenden

<resources>

<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
</style>
<style name="HiddenTitleTheme" parent="AppTheme">
    <item name="windowNoTitle">true</item>
    <item name="windowActionBar">false</item>
</style>

Nennen Sie dies einfach in Ihrem Manifest so android:theme="@style/HiddenTitleTheme"


2

Sie können die Statusleiste ausblenden, indem Sie die Farbe mithilfe von XML auf transperant einstellen . Fügen Sie Ihrem Aktivitätsthema das Element statusBarColor hinzu :

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="android:statusBarColor">@android:color/transparent</item>
</style>

Bitte fügen Sie einige Erklärung Code nur Antworten sind etwas verwirrend für andere
Ram Ghadiyaram

2
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setTheme(R.style.Theme_AppCompat_Light_NoActionBar);
    requestWindowFeature(Window.FEATURE_NO_TITLE);

    this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN
    , WindowManager.LayoutParams.FLAG_FULLSCREEN);

    setContentView(R.layout.activity__splash_screen);
}

Während dieser Code die Frage lösen kann, einschließlich einer Erklärung, wie und warum dies das Problem löst, würde dies wirklich dazu beitragen, die Qualität Ihres Beitrags zu verbessern, und wahrscheinlich zu mehr Up-Votes führen. Denken Sie daran, dass Sie in Zukunft die Frage für die Leser beantworten, nicht nur für die Person, die jetzt fragt. Bitte bearbeiten Sie Ihre Antwort, um Erklärungen hinzuzufügen und anzugeben, welche Einschränkungen und Annahmen gelten.
Dharman

Ich hatte nicht viel Ahnung, was genau AppCompat ist, ich habe es nur verwendet. Und diese drei Zeilen haben den Job gemacht.
user3156040

Schade ist, dass Googles eigene Dokumentation wie immer falsch ist, wie dies erreicht werden soll. Vielleicht sollten sie diesen Code kopieren und einfügen.
Zeeshan


0

Wir können nicht verhindern, dass der Status im Vollbildmodus in (4.4+) Kitkat- oder höheren Geräten angezeigt wird. Versuchen Sie daher einen Hack, um die Erweiterung der Statusleiste zu blockieren.

Die Lösung ist ziemlich groß, daher hier der Link von SO:

StackOverflow: Statusleiste in Android 4.4+ oder Kitkat mit Vollbild ausblenden


Ich denke, Sie liegen falsch, bitte werfen Sie einen Blick auf die offiziellen Informationen zum Ausblenden der Statusleiste developer.android.com/training/system-ui/status.html
Jose Ricardo Citerio Alcala

Jose, ich werde die Informationen auf dem angegebenen Link überprüfen und die Antwort bei Bedarf aktualisieren. Diese Frage / Antwort wurde vor einem Jahr hinzugefügt, als es für dieses Szenario keine offizielle Lösung gab. Möglicherweise in der nächsten Version oder Versionen haben Google / Android die API / Methode für die gleiche hinzugefügt. Wenn sie die Lösung bereitgestellt haben, ist es eine Freude. Vielen Dank!
Jyo the Whiff

0

Diese Lösung funktioniert für mich :)

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    if (Build.VERSION.SDK_INT >= 19) {
           getWindow().setFlags(AccessibilityNodeInfoCompat.ACTION_NEXT_HTML_ELEMENT, AccessibilityNodeInfoCompat.ACTION_NEXT_HTML_ELEMENT);
           getWindow().getDecorView().setSystemUiVisibility(3328);
    }else{
           requestWindowFeature(Window.FEATURE_NO_TITLE);
           this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
    }

    DataBindingUtil.setContentView(this, R.layout.activity_hse_video_details);

0
public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    // If the Android version is lower than Jellybean, use this call to hide
    // the status bar.
    if (Build.VERSION.SDK_INT < 16) {
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                WindowManager.LayoutParams.FLAG_FULLSCREEN);
    } else {
       View decorView = getWindow().getDecorView();
       // Hide the status bar.
       int uiOptions = View.SYSTEM_UI_FLAG_FULLSCREEN;
       decorView.setSystemUiVisibility(uiOptions);
       // Remember that you should never show the action bar if the
       // status bar is hidden, so hide that too if necessary.
       ActionBar actionBar = getActionBar();
       actionBar.hide();
    }

    setContentView(R.layout.activity_main);

}
...
}

0

Benutzt in Manifest

android:theme="@android:style/Theme.Holo.NoActionBar.Fullscreen"

Kommt wohl auf das Thema an. In meinem Fall ist eine Ausnahme aufgetreten: "java.lang.IllegalStateException: Sie müssen für diese Aktivität ein Theme.AppCompat-Design (oder einen Nachkommen) verwenden."
CoolMind

0

Unter res -> values ​​-> styles.xml

Innerhalb des Style Body Tag Paste

<item name="android:windowTranslucentStatus" tools:targetApi="kitkat">true</item>

0

Wenn Sie auf Google Dokumente verweisen, können Sie diese Methode für Android 4.1 und höher verwenden. Rufen Sie diese Methode vor setContentView () auf.

public void hideStatusBar() {
    View view = getWindow().getDecorView();
    int uiOption = View.SYSTEM_UI_FLAG_FULLSCREEN;
    view.setSystemUiVisibility(uiOption);
    ActionBar actionBar = getActionBar();
    if (actionBar != null) {
        actionBar.hide();
    }
}

-1
requestWindowFeature(Window.FEATURE_NO_TITLE);
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);

Hallo! Fügen Sie einige Kommentare oder verbale Erklärungen hinzu, was Sie tun.
George
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.