Jak ukryć pasek stanu w systemie Android


104

Skierowałem ten link . W tym przypadku, jeśli użytkownik kliknie na EditText (np. To:), w tym czasie klawiatura zostanie wyskakująca i jednocześnie użytkownik będzie mógł przewijać wszystkie pozostałe widoki (np .: tworzenie wiadomości, temat, przycisk wysyłania) w ten ekran. Podobnie w mojej aplikacji mam jedno działanie polegające na tym, że mam kilka widżetów lub widoków. Załóżmy, że jeśli użytkownik kliknie Edittext, który znajduje się w mojej aktywności, klawiatura wyskakuje i mogę przewijać, aby zobaczyć pozostałe widoki. Ale jeśli podam ten atrybut android:theme="@android:style/Theme.NoTitleBar.Fullscreen"w manifeście, nie mogłem przewinąć, aby zobaczyć pozostałe widoki, ale jeśli podam atrybutandroid:theme="@android:style/Theme.NoTitleBar"jak to w manifeście Mogę przewijać, aby zobaczyć pozostały widok, ale na tym ekranie jest pasek stanu, tutaj chcę pełny ekran i nawet jeśli klawiatura jest wyskoczona, mogę przewijać, aby zobaczyć pozostałe widoki ..? jakie zmiany muszę wprowadzić w tym ..?


3
@ user448250: Zauważ, że nie możesz ukryć paska stanu w Androidzie 3.0 i istnieje spora szansa, że ​​nie będziesz w stanie ukryć paska stanu w przyszłości. W systemie Android 3.0 na pasku stanu znajdują się przyciski BACK i HOME, więc pasek stanu musi być zawsze dostępny.
CommonsWare,

Właśnie udało mi się ukryć zarówno tytuł, jak i pasek stanu na emulatorze z 3.0, poziom API 11.
erdomester

Pełny ekran powinien być nadal dozwolony, użytkownik zwykle nie chce widzieć paska stanu podczas gry na pełnym ekranie.
GMsoF,

@ user448250 Czy kiedykolwiek się o tym dowiedziałeś?
Tiago,

Czym w ogóle jest aktywność? Czy to jakiś plik xml w folderze Twojej witryny?
Mgławicowy pył

Odpowiedzi:


173

Napisz to w swojej aktywności

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

Sprawdź dokument tutaj: https://developer.android.com/training/system-ui/status.html

a Twoja aplikacja przejdzie w tryb pełnoekranowy. bez paska stanu, bez paska tytułu. :)


29
Zwróć uwagę, że to nie zadziała, jeśli Twoja nadklasa aktywności wywoła setContentView w metodzie onCreate - aplikacja zakończy pracę z wyjątkiem.
Ben Clayton,

1
@Ron Testowałem na 8. poziomie API. Możliwe, że zachowanie jest inne na innych poziomach?
Ben Clayton,

Czy to dotyczy wszystkich wersji od 2.3.x do 4.x?
Kostadin,

1
To nadal zapobiega przewijaniu ekranu podczas wyświetlania klawiatury programowej.
Tiago,

3
Użyj go wcześniej, super.onCreate(savedInstanceState);jeśli się zawiesi
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
Zauważyłem, że kiedy używam tej metody, pokazanie miękkiej klawiatury przesuwa widoki nad editText, zamiast zmieniać rozmiar rzeczy. Jak to naprawić?
programista Androida

19

Użyj motywu "Theme.NoTitleBar.Fullscreen"i wypróbuj ustawienia "android:windowSoftInputMode=adjustResize"dla aktywności w. AndroidManifest.xml.Szczegóły znajdziesz tutaj .


Dzięki powyższemu podejściu mój pasek stanu może być ukryty, gdy aplikacja działa na pełnym ekranie, jednak nadal widzę pasek stanu, przesuwając stronę w dół. Czy jest sposób, jeśli w ogóle nie chcę paska stanu?
Hazel Wang

15

Użyj tego kodu, aby ukryć pasek stanu w aplikacji i jest łatwy w użyciu

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

12

Jeśli potrzebujesz tego w jednym działaniu, musisz dodać onCreate, przed setContentView:

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

setContentView(R.layout.your_screen);

1
W ten sposób klawiatura obejmuje pole wprowadzania danych w widoku sieciowym.
Allen Vork,

@AllenVork jakieś rozwiązanie?
Ishaan Kumar

12

Dodaj to do swojej klasy aktywności

@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

Użyj tego dla swojego 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);
        }
    }

Możesz użyć tej metody, aby ukryć pasek stanu. Jest to również ważne, aby ukryć pasek akcji. W tym przypadku możesz getSupportActionBar (). Hide (), jeśli rozszerzyłeś aktywność z biblioteki wsparcia, takiej jak Appcompat, lub możesz po prostu wywołać getActionBar (). Hide () po metodzie wspomnianej powyżej. Dzięki


6

Zmień motyw aplikacji w manifest.xmlpliku.

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

O dziwo, pokazuje to pomarańczowy pasek u góry ekranu. Jednak pasek powiadomień jest ukryty.
Duński Ashfaq

6

Jeśli ukrywasz pasek stanu, zrób to w onCreate (dla działania) i onCreateView / onViewCreated (dla fragmentu)

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

I nie zapomnij wyczyścić flagi podczas wychodzenia z działania, w przeciwnym razie po odwiedzeniu tej czynności będziesz mieć pełny ekran w całej aplikacji. Aby wyczyścić, zrób to w swoim onDestroy (dla Activity) lub onDestroyView (dla fragmentu)

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

5

Użyj tego kodu:

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

4

Ten kod ukrywa pasek stanu.

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

aby ukryć pasek akcji, napisz tę linię: -

requestWindowFeature(Window.FEATURE_NO_TITLE);

obie linie można zapisać łącznie, aby ukryć pasek akcji i pasek stanu. wszystkie te wiersze muszą być zapisane przed setContentViewwywołaniem onCreatemetody w metodzie.


Działa pięknie. Dzięki!
Joshua Pinter,

3

W AndroidManifest.xml -> wewnątrz działania, którego chcesz użyć, dodaj:

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

aw MainActivity.java -> wewnątrz metody onCreate () dodaj:

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

3

Możesz ukryć się za pomocą styles.xml

<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>

po prostu nazwij to w swoim manifeście w ten sposób android:theme="@style/HiddenTitleTheme"


3

Możesz ukryć pasek stanu, ustawiając jego kolor na przezroczysty za pomocą XML . Dodaj element statusBarColor do motywu działania:

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

proszę dodać kod wyjaśniający, tylko odpowiedzi są nieco mylące dla innych
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);
}

Chociaż ten kod może rozwiązać problem, w tym wyjaśnienie, jak i dlaczego to rozwiązuje problem, naprawdę pomogłoby poprawić jakość twojego posta i prawdopodobnie zaowocowałoby większą liczbą pozytywnych głosów. Pamiętaj, że odpowiadasz na pytanie do czytelników w przyszłości, a nie tylko osoba, która zapyta teraz. Proszę edytować swoje odpowiedzi, aby dodać wyjaśnień i dać wskazówkę co zastosować ograniczenia i założenia.
Dharman

Nie miałem pojęcia, czym dokładnie jest AppCompat, po prostu go używałem. I te trzy linie spełniły swoje zadanie.
user3156040

Szkoda, że ​​własna dokumentacja Google, jak zawsze, zawiera błędne informacje, jak to osiągnąć. Może powinni skopiować, wkleić ten kod.
zeeshan


0

Nie możemy zapobiec wyświetlaniu statusu w trybie pełnoekranowym w urządzeniach KitKat (4.4+) lub nowszych, więc spróbuj zhakować, aby zablokować rozwijanie paska stanu.

Rozwiązanie jest dość duże, więc oto link do SO:

StackOverflow: Ukryj pasek stanu w systemie Android 4.4+ lub KitKat z pełnym ekranem


Myślę, że się mylisz, zapoznaj się z oficjalnymi informacjami o ukrywaniu paska stanu developer.android.com/training/system-ui/status.html
Jose Ricardo Citerio Alcala

Jose, sprawdzę informacje pod podanym linkiem iw razie potrzeby zaktualizuję odpowiedź. To pytanie / odpowiedź dodano rok temu, kiedy nie było oficjalnego rozwiązania dla tego scenariusza. Może być w następnej wersji lub wersjach google / android dodali API / metodę dla tego samego. Jeśli dostarczyli rozwiązanie, to jest to przyjemność. Dzięki!
Jyo the Whiff,

0

To rozwiązanie działa na mnie :)

@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

Wykorzystane w Manifest

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

Prawdopodobnie zależy od tematu. W moim przypadku wystąpił wyjątek: „java.lang.IllegalStateException: z tym działaniem należy użyć motywu Theme.AppCompat (lub elementu podrzędnego)”.
CoolMind

0

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

Wklej tag wewnątrz stylu

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

0

Jeśli odwołujesz się do Dokumentów Google , możesz użyć tej metody dla Androida 4.1 i nowszych, wywołaj tę metodę przed setContentView ()

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

Witaj! Rozważ dodanie kilku komentarzy lub ustnych wyjaśnień tego, co robisz.
George,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.