Această lecție descrie cum să ascundeți bara de stare pe diferite versiuni de Android. Ascunderea barei de stare (și, opțional, a barei de navigare) permite conținutului să utilizeze mai mult din spațiul de afișare, oferind astfel o experiență mai captivantă pentru utilizator.

Figura 1 prezintă o aplicație cu o bară de stare vizibilă:

Figura 1. Bara de stare vizibilă.

Figura 2 prezintă o aplicație cu o bară de stare ascunsă. Observați că și bara de acțiune este ascunsă. Nu ar trebui să afișați niciodată bara de acțiune fără bara de stare.

Figura 2. Bara de stare ascunsă.

Ascundeți bara de stare pe Android 4.0 și versiuni inferioare

Puteți ascunde bara de stare pe Android 4.0 (nivel API 14) și versiuni inferioare prin setareaWindowManager stegulețelor. Puteți face acest lucru în mod programatic sau prinsetarea unei teme de activitate în fișierul manifest al aplicației dumneavoastră. Setarea unei teme de activitate în fișierul manifest al aplicației dumneavoastră este abordarea preferată dacă bara de stare trebuie să rămână întotdeauna ascunsă în aplicația dumneavoastră (deși, strict vorbind, puteți suprascrie programatic tema dacă doriți). De exemplu:

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

Avantajele utilizării unei teme de activitate sunt următoarele:

  • Este mai ușor de întreținut și mai puțin predispus la erori decât setarea unui indicator în mod programatic.
  • Are ca rezultat tranziții mai fluide ale interfeței de utilizator, deoarece sistemul are informațiile de care are nevoiepentru a reda interfața de utilizator înainte de a instanția activitatea principală a aplicației dumneavoastră.

Alternativ, puteți seta programatic WindowManager stegulețe.Această abordare facilitează ascunderea și afișarea barei de stare pe măsură ce utilizatorul interacționează cu aplicația dumneavoastră:

Kotlin

class MainActivity : Activity() { override fun onCreate(savedInstanceState: Bundle?) { 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) { window.setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN) } setContentView(R.layout.activity_main) } ...}

Java

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); } setContentView(R.layout.activity_main); } ...}

Când setați stegulețele WindowManager (fie prin intermediul unei teme de activitate, fie în mod programatic), stegulețele rămân în vigoare, cu excepția cazului în care aplicația dumneavoastră le șterge.

Puteți utilizaFLAG_LAYOUT_IN_SCREENpentru a seta aspectul activității dvs. pentru a utiliza aceeași suprafață de ecran care este disponibilă atunci când ați activatFLAG_FULLSCREEN. Acest lucru împiedică redimensionarea conținutului dvs. atunci când bara de stare se ascunde și se afișează.

Hide the Status Bar on Android 4.1 and Higher

Puteți ascunde bara de stare pe Android 4.1 (nivel API 16) și versiunile superioare utilizând setSystemUiVisibility().setSystemUiVisibility()setează indicatori UI la nivelul vizualizării individuale; aceste setări sunt agregate la nivelul ferestrei. UtilizareasetSystemUiVisibility() pentru a seta stegulețele UI vă oferă un control mai granular asupra barelor de sistem decât utilizarea stegulețelorWindowManager. Acest fragment ascunde bara de stare:

Kotlin

// Hide the status bar.window.decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_FULLSCREEN// Remember that you should never show the action bar if the// status bar is hidden, so hide that too if necessary.actionBar?.hide()

Java

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

Rețineți următoarele:

  • După ce stegulețele UI au fost șterse (de exemplu, prin navigarea în afara activității), aplicația dvs. trebuie să le reseteze dacă doriți să ascundeți din nou barele.Consultați Responding to UI Visibility Changes (Răspunsul la schimbările de vizibilitate UI) pentru o discuție despre cum să ascultați schimbările de vizibilitate UI astfel încât aplicația dvs. să poată răspunde în consecință.
  • Unde setați stegulețele UI face o diferență. Dacă ascundeți barele de sistem în metoda onCreate() a activității dvs. și utilizatorul apasă pe Home, barele de sistem vor reapărea. Când utilizatorul redeschide activitatea, onCreate() nu va fi apelată, astfel încât barele de sistem vor rămâne vizibile. Dacă doriți ca modificările UI de sistem să persiste pe măsură ce utilizatorul navighează în interiorul și în afara activității dumneavoastră, setați stegulețele UI înonResume()sau onWindowFocusChanged().
  • Metoda setSystemUiVisibility() are efect numai dacă vizualizarea din care o apelați este vizibilă.
  • Navigația în afara vizualizării face ca stegulețele setate cu setSystemUiVisibility() să fie șterse.

Make Content Appear Behind the Status Bar

Pe Android 4.1 și versiunile ulterioare, puteți seta conținutul aplicației dvs. să apară în spatele barei de stare, astfel încât conținutul să nu se redimensioneze pe măsură ce bara de stare se ascunde și se afișează.Pentru a face acest lucru, utilizațiSYSTEM_UI_FLAG_LAYOUT_FULLSCREEN.De asemenea, este posibil să fie nevoie să utilizațiSYSTEM_UI_FLAG_LAYOUT_STABLE pentru a ajuta aplicația dvs. să mențină o dispunere stabilă.

Când utilizați această abordare, devine responsabilitatea dvs. să vă asigurați că părțile critice ale interfeței de utilizare a aplicației dvs. (de exemplu, comenzile încorporate într-o aplicație Hărți) nu sfârșesc prin a fi acoperite de barele de sistem. Acest lucru ar putea face ca aplicația dumneavoastră să devină inutilizabilă. În cele mai multe cazuri, puteți rezolva acest lucru prin adăugarea atributului android:fitsSystemWindows la fișierul XML layout, setat latrue. Acest lucru ajustează padding-ul din ViewGroup părinte pentru a lăsa spațiu pentru ferestrele de sistem. Acest lucru este suficient pentru majoritatea aplicațiilor.

În unele cazuri, totuși, este posibil să fie nevoie să modificați umplutura implicită pentru a obține layout-ul dorit pentru aplicația dumneavoastră. Pentru a manipula în mod direct modul în care conținutul dvs. este așezat în raport cu barele de sistem (care ocupă un spațiu cunoscut sub numele de „inserții de conținut” ale ferestrei), suprascrieți fitSystemWindows(Rect insets).Metoda fitSystemWindows() este apelată de ierarhia de vizualizare atunci când inserțiile de conținut pentru o fereastră s-au schimbat, pentru a permite ferestrei să își ajusteze conținutul în consecință. Prin suprascrierea acestei metode, puteți gestiona setările (și, prin urmare, aspectul aplicației dumneavoastră) așa cum doriți.

Lasă un răspuns

Adresa ta de email nu va fi publicată.