Tato lekce popisuje, jak skrýt stavový řádek v různých verzích systému Android. Skrytí stavového řádku (a volitelně i navigačního řádku) umožňuje obsahu využít více místa na displeji, čímž se docílí většího uživatelského zážitku.

Obrázek 1 ukazuje aplikaci s viditelným stavovým řádkem:

Obrázek 1. Viditelný stavový řádek.

Obrázek 2 ukazuje aplikaci se skrytým stavovým řádkem. Všimněte si, že je skrytý i akční panel. Nikdy byste neměli zobrazovat akční panel bez stavového řádku.

Obrázek 2. Skrytý stavový řádek.

Skrytí stavového řádku v systému Android 4.0 a nižším

Stavový řádek v systému Android 4.0 (úroveň API 14) a nižším můžete skrýt nastavením příznakůWindowManager. Můžete to provést programově nebo nastavením motivu aktivity v souboru manifest aplikace. Nastavení motivu aktivity v souboru manifestu aplikace je upřednostňovaným přístupem, pokud má stavový řádek zůstat v aplikaci vždy skrytý (i když striktně vzato můžete motiv programově přepsat, pokud chcete). Například:

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

Výhody použití motivu aktivity jsou následující:

  • Snadněji se udržuje a je méně náchylný k chybám než programové nastavení příznaku.
  • Vede k plynulejším přechodům mezi uživatelskými rozhraními, protože systém má informace, které potřebuje k vykreslení uživatelského rozhraní, ještě před instancováním hlavní aktivity vaší aplikace.

Alternativně můžete programově nastavit WindowManagerpříznaky.Tento přístup usnadňuje skrývání a zobrazování stavového řádku v průběhu interakce uživatele s vaší aplikací:

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

Pokud nastavíte příznaky WindowManager (ať už prostřednictvím motivu aktivity nebo programově), příznaky zůstanou v platnosti, dokud je vaše aplikace nevymaže.

PomocíFLAG_LAYOUT_IN_SCREEN můžete nastavit rozvržení aktivity tak, aby používala stejnou plochu obrazovky, která je k dispozici, když jste povoliliFLAG_FULLSCREEN. Tím zabráníte změně velikosti obsahu, když se stavový řádek skryje a zobrazí.

Skrytí stavového řádku v systému Android 4.1 a vyšším

Stavový řádek v systému Android 4.1 (úroveň API 16) a vyšším můžete skrýt pomocí setSystemUiVisibility(). setSystemUiVisibility() nastavuje příznaky uživatelského rozhraní na úrovni jednotlivých zobrazení; tato nastavení jsou agregována na úroveň okna. Použití příznakusetSystemUiVisibility() k nastavení příznaků uživatelského rozhraníposkytuje podrobnější kontrolu nad systémovými lištami než použití příznakůWindowManager. Tento úryvek skrývá stavový řádek:

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

Všimněte si následujícího:

  • Jakmile byly příznaky uživatelského rozhraní vymazány (například odchodem od činnosti), musí je vaše aplikace znovu nastavit, pokud chcete řádky opět skrýt.V části Reakce na změny viditelnosti uživatelského rozhraní je popsáno, jak naslouchat změnám viditelnosti uživatelského rozhraní, aby vaše aplikace mohla odpovídajícím způsobem reagovat.
  • Záleží na tom, kde příznaky uživatelského rozhraní nastavíte. Pokud v metodě onCreate() aktivity skryjete systémové pruhy a uživatel stiskne tlačítko Home, systémové pruhy se znovu objeví. Když uživatel aktivitu znovu otevře, metoda onCreate() se nezavolá, takže systémové pruhy zůstanou viditelné. Pokud chcete, aby změny systémového uživatelského rozhraní topersistovaly, když uživatel přechází do aktivity a z aktivity, nastavte příznaky uživatelského rozhraní v onResume()nebo onWindowFocusChanged().
  • Metoda setSystemUiVisibility() má účinek pouze tehdy, pokud je zobrazení, ze kterého ji voláte, viditelné.
  • Navigace mimo zobrazení způsobí vymazání příznaků nastavených pomocí setSystemUiVisibility().

Způsob, aby se obsah zobrazoval za stavovým řádkem

V systému Android 4. V případě, že se obsah zobrazuje za stavovým řádkem, může být příznak vymazán.1 a vyšších můžete nastavit, aby se obsah aplikace zobrazoval za stavovým řádkem, takže se jeho velikost nebude měnit podle toho, jak se stavový řádek skrývá a zobrazuje.K tomu použijte příkazSYSTEM_UI_FLAG_LAYOUT_FULLSCREEN.Možná budete muset použít také příkazSYSTEM_UI_FLAG_LAYOUT_STABLE, abyste pomohli aplikaci udržet stabilní rozložení.

Při použití tohoto přístupu je vaší povinností zajistit, aby kritické části uživatelského rozhraní aplikace (například vestavěné ovládací prvky v aplikaci Mapy) nebyly nakonec zakryty systémovými lištami. To by mohlo způsobit nepoužitelnost aplikace. Ve většině případů to můžete vyřešit přidáním atributu android:fitsSystemWindows do souboru rozvržení XML nastaveného na hodnotutrue. Tím se upraví výplň nadřazeného ViewGroup, aby zbylo místo pro systémová okna. To je pro většinu aplikací dostačující.

V některých případech však může být nutné výchozí padding upravit, abyste získali požadované rozložení pro vaši aplikaci. Chcete-li přímo manipulovat s tím, jak se vášobsah rozvrhne vzhledem k systémovým pruhům (které zabírají prostor známý jako „obsahové vložky“ okna), přepište fitSystemWindows(Rect insets). fitSystemWindows() Metoda je volána hierarchií zobrazení, když se změní obsahové vložky okna, aby okno mohlo odpovídajícím způsobem upravit svůj obsah. Přepsáním této metody můžete sinsety (a tedy i s rozvržením aplikace) zacházet, jak chcete.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.