I denne lektion beskrives det, hvordan du skjuler statuslinjen i forskellige versioner af Android. Ved at skjule statuslinjen (og eventuelt navigationslinjen) kan indholdet bruge mere af skærmpladsen og derved give en mere fordybende brugeroplevelse.
Figur 1 viser en app med en synlig statuslinje:
Figur 1. Synlig statuslinje.
Figur 2 viser en app med en skjult statuslinje. Bemærk, at handlingslinjen også er skjult. Du bør aldrig vise aktionslinjen uden statuslinjen.
Figur 2. Skjult statuslinje.
Husk statuslinjen på Android 4.0 og lavere
Du kan skjule statuslinjen på Android 4.0 (API-niveau 14) og lavere ved at indstilleWindowManager
-flagene. Du kan gøre dette programmatisk eller ved at indstille et aktivitetstema i din app’s manifestfil. Indstilling af et aktivitetstema i appens manifestfil er den foretrukne fremgangsmåde, hvis statuslinjen altid skal forblive skjult i din app (selv om du strengt taget kan tilsidesætte temaet programmatisk, hvis du ønsker det). Eksempelvis:
<application ... android:theme="@android:style/Theme.Holo.NoActionBar.Fullscreen" > ...</application>
Fordelene ved at bruge et aktivitetstema er følgende:
- Det er lettere at vedligeholde og mindre fejlbehæftet end at indstille et flag programmatisk.
- Det resulterer i smidigere overgange i brugergrænsefladen, fordi systemet har de nødvendige oplysninger til at gengive din brugergrænseflade, før appens hovedaktivitet instantieres.
Alternativt kan du indstille WindowManager
flag programmeringsmæssigt.Denne fremgangsmåde gør det lettere at skjule og vise statuslinjen, efterhånden som brugeren interagerer med din app:
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); } ...}
Når du indstiller WindowManager
-flag (enten via et aktivitetstema eller programmæssigt), forbliver flagene i kraft, medmindre din app rydder dem.
Du kan brugeFLAG_LAYOUT_IN_SCREEN
til at indstille dit aktivitetslayout til at bruge det samme skærmområde, som er tilgængeligt, når du har aktiveretFLAG_FULLSCREEN
. Dette forhindrer, at dit indhold ændrer størrelse, når statuslinjen skjules og vises.
Husk statuslinjen på Android 4.1 og højere
Du kan skjule statuslinjen på Android 4.1 (API-niveau 16) og højere ved at bruge setSystemUiVisibility()
.setSystemUiVisibility()
indstiller UI-flag på det individuelle visningsniveau; disse indstillinger aggregeres til vinduesniveauet. Ved at bruge setSystemUiVisibility()
til at indstille UI-flag giver det dig mere detaljeret kontrol over systemlinjerne end ved at bruge WindowManager
-flag. Dette uddrag skjuler statuslinjen:
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();
Bemærk følgende:
- Når UI-flagene er blevet slettet (f.eks. ved at navigere væk fra aktiviteten), skal din app nulstille dem igen, hvis du ønsker at skjule linjerne igen.Se Reaktioner på ændringer i UI-visibilitet for at få en gennemgang af, hvordan du lytter efter ændringer i UI-visibilitet, så din app kan reagere i overensstemmelse hermed.
- Det gør en forskel, hvor du indstiller UI-flagene. Hvis du skjuler systemlinjerne i din aktivitets
onCreate()
metode, og brugeren trykker på Hjem, vises systemlinjerne igen. Når brugeren genåbner aktiviteten, vilonCreate()
ikke blive kaldt, så systembjælkerne forbliver synlige. Hvis du vil have ændringer i systemets brugergrænseflade til at bestå, når brugeren navigerer ind og ud af din aktivitet, skal du indstille UI-flagene ionResume()
elleronWindowFocusChanged()
. - Metoden
setSystemUiVisibility()
har kun en effekt, hvis den visning, du kalder den fra, er synlig. - Navigation væk fra visningen medfører, at flag, der er indstillet med
setSystemUiVisibility()
, slettes.
Få indhold til at fremstå bag statuslinjen
På Android 4.1 og højere kan du indstille dit programs indhold til at blive vist bag statuslinjen, så indholdet ikke ændrer størrelse, når statuslinjen skjules og vises.Du skal brugeSYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
for at gøre dette.Du skal muligvis også brugeSYSTEM_UI_FLAG_LAYOUT_STABLE
for at hjælpe din app med at opretholde et stabilt layout.
Når du bruger denne fremgangsmåde, bliver det dit ansvar at sikre, at kritiske dele af din apps brugergrænseflade (f.eks. de indbyggede kontroller i et kortprogram) ikke ender med at blive dækket af systemlinjerne. Dette kan gøre din app ubrugelig. I de fleste tilfælde kan du håndtere dette ved at tilføje attributten android:fitsSystemWindows
til din XML-layoutfil, der er indstillet tiltrue
. Dette justerer padding af den overordnede ViewGroup
for at give plads til systemvinduerne. Dette er tilstrækkeligt for de fleste programmer.
I nogle tilfælde kan du dog være nødt til at ændre standardpolstring for at få det ønskedelayout til dit program. Hvis du vil manipulere direkte med, hvordan dit indhold skal placeres i forhold til systembjælkerne (som optager en plads, der er kendt som vinduets “indholdsindsats”), skal du tilsidesætte fitSystemWindows(Rect insets)
. fitSystemWindows()
-metoden kaldes af visningshierarkiet, når indholdsindsatserne for et vindue er ændret, så vinduet kan justere sit indhold i overensstemmelse hermed. Ved at tilsidesætte denne metode kan du håndtere indsætningerne (og dermed din app’s layout) som du ønsker det.