Ez a lecke leírja, hogyan lehet elrejteni az állapotsort az Android különböző verzióiban. Az állapotsor (és opcionálisan a navigációs sáv) elrejtésével a tartalom több helyet használhat a kijelzőn, ezáltal magával ragadóbb felhasználói élményt nyújt.

Az 1. ábra egy alkalmazást mutat látható állapotsorral:

1. ábra. Látható állapotsor.

A 2. ábra egy rejtett állapotsorral rendelkező alkalmazást mutat. Vegyük észre, hogy az akciósor is el van rejtve. Soha ne jelenítse meg az akciósávot az állapotsor nélkül.

2. ábra. Rejtett állapotsor.

Az állapotsor elrejtése Android 4.0 és alacsonyabb verziókon

Az Android 4.0 (14. API-szint) és alacsonyabb verziókon az állapotsort aWindowManager zászlók beállításával rejtheti el. Ezt programozottan vagy az alkalmazás manifeszt fájljában lévő aktivitási téma beállításával teheti meg. A tevékenységtéma beállítása az alkalmazás manifeszt fájljában az előnyösebb megközelítés, ha az állapotsor mindig rejtve marad az alkalmazásban (bár szigorúan véve programozottan is felülbírálhatja a témát, ha akarja). Például:

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

Az activity theme használatának előnyei a következők:

  • Egyszerűbb karbantartani és kevésbé hibaigényes, mint a flag programozott beállítása.
  • Gördülékenyebb UI-átmeneteket eredményez, mivel a rendszer rendelkezik a szükséges információkkal a UI rendereléséhez, mielőtt az alkalmazás fő aktivitását instanciázná.

Alternatívaként programozottan is beállíthat WindowManager zászlókat.Ez a megközelítés megkönnyíti az állapotsor elrejtését és megjelenítését, ahogy a felhasználó interakcióba lép az alkalmazással:

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

Ha WindowManager zászlókat állít be (akár egy tevékenységtémán keresztül, akár programozottan), a zászlók érvényben maradnak, amíg az alkalmazás nem törli őket.

AFLAG_LAYOUT_IN_SCREEN segítségével beállíthatja, hogy a tevékenység elrendezése ugyanazt a képernyőterületet használja, amely akkor áll rendelkezésre, ha engedélyezte aFLAG_FULLSCREEN funkciót. Ez megakadályozza, hogy a tartalom átméreteződjön, amikor az állapotsor elrejti és megjeleníti.

Az állapotsor elrejtése Android 4.1 és újabb verziókon

Az állapotsort Android 4.1 (API 16. szint) és újabb verziókon a setSystemUiVisibility() használatával rejtheti el.A setSystemUiVisibility() az egyedi nézeti szinten állítja be az UI-jelzőket; ezek a beállítások az ablak szintjére aggregálódnak. AsetSystemUiVisibility() használata az UI-jelzők beállítására a rendszersávok feletti részletesebb ellenőrzést biztosít, mint aWindowManager jelzők használata. Ez a részlet elrejti az állapotsort:

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

Megjegyezzük a következőket:

  • Amikor az UI flageket töröltük (például a tevékenységtől való eltávolodással), az alkalmazásnak vissza kell állítania őket, ha újra el akarjuk rejteni a sávokat.Lásd A felhasználói felület láthatóságának változásaira való reagálás című fejezetet, ahol arról olvashat, hogyan kell figyelni a felhasználói felület láthatóságának változásaira, hogy az alkalmazás ennek megfelelően reagálhasson.
  • Az, hogy hol állítja be a felhasználói felület zászlóit, nem mindegy. Ha a tevékenység onCreate() módszerében elrejti a rendszersávokat, és a felhasználó megnyomja a Home gombot, a rendszersávok újra megjelennek. Amikor a felhasználó újra megnyitja az aktivitást, a onCreate() nem lesz meghívva, így a rendszersávok láthatóak maradnak. Ha azt szeretné, hogy a rendszer felhasználói felületének változásai fennmaradjanak, amikor a felhasználó be- és kimozdul a tevékenységből, állítsa be a onResume() vagy onWindowFocusChanged() UI zászlókat.
  • A setSystemUiVisibility() módszer csak akkor hat, ha a nézet, amelyből meghívja, látható.
  • A nézetből való eltávolodás a setSystemUiVisibility() segítségével beállított zászlók törlését okozza.

Make Content Appear Behind the Status Bar

Az Android 4 rendszeren.1 és újabb rendszereken beállíthatja, hogy az alkalmazás tartalma az állapotsor mögött jelenjen meg, így a tartalom nem változtatja méretét, amikor az állapotsor elrejti és megjeleníti.Ehhez használja aSYSTEM_UI_FLAG_LAYOUT_FULLSCREEN-t. Használhatja aSYSTEM_UI_FLAG_LAYOUT_STABLE-t is, hogy segítsen az alkalmazásnak stabil elrendezést fenntartani.

Ha ezt a megközelítést használja, az Ön felelőssége lesz annak biztosítása, hogy az alkalmazás felhasználói felületének kritikus részei (például a beépített vezérlők a Térképek alkalmazásban) ne kerüljenek a rendszer sávjai alá. Ez használhatatlanná teheti az alkalmazást. A legtöbb esetben ezt úgy tudja kezelni, hogy az XML elrendezési fájljához hozzáadja a android:fitsSystemWindows attribútumot true értékkel. Ez beállítja a szülő ViewGroup kitöltését, hogy helyet hagyjon a rendszerablakoknak. Ez a legtöbb alkalmazás számára elegendő.

Némely esetben azonban szükség lehet az alapértelmezett kitöltés módosítására, hogy az alkalmazás számára a kívánt elrendezést kapja. Annak közvetlen manipulálásához, hogy a tartalom hogyan helyezkedjen el a rendszer sávjaihoz képest (amelyek az ablak “tartalmi betétek” néven ismert helyet foglalnak el), írja felül a fitSystemWindows(Rect insets) metódust.A fitSystemWindows() metódust a nézeti hierarchia hívja meg, amikor egy ablak tartalmi betétei megváltoztak, hogy az ablak ennek megfelelően igazíthassa a tartalmát. A metódus felülírásával úgy kezelheted a betéteket (és ezáltal az alkalmazásod elrendezését), ahogyan csak akarod.

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.