Den här lektionen beskriver hur du döljer statusfältet i olika versioner av Android. Genom att dölja statusfältet (och eventuellt navigationsfältet) kan innehållet använda mer av bildskärmsutrymmet, vilket ger en mer uppslukande användarupplevelse.

Figur 1 visar en app med ett synligt statusfält:

Figur 1. Synligt statusfält.

Figur 2 visar en app med dolt statusfält. Observera att handlingsfältet också är dolt. Du bör aldrig visa handlingsfältet utan statusfältet.

Figur 2. Dolt statusfält.

Dölj statusfältet på Android 4.0 och lägre

Du kan dölja statusfältet på Android 4.0 (API-nivå 14) och lägre genom att ställa inWindowManager flaggor. Du kan göra detta programmatiskt eller genom att ställa in ett aktivitetstema i appens manifestfil. Att ställa in ett aktivitetstema i appens manifestfil är det bästa tillvägagångssättet om statusfältet alltid ska förbli dolt i din app (även om du i strikt mening kan åsidosätta temat programmatiskt om du vill). Till exempel:

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

Fördelarna med att använda ett aktivitetstema är följande:

  • Det är lättare att underhålla och mindre felbenäget än att ställa in en flagga programmatiskt.
  • Det resulterar i smidigare övergångar i användargränssnittet eftersom systemet har den information som behövs för att rendera ditt användargränssnitt innan appens huvudaktivitet instansieras.

Alternativt kan du ställa in WindowManager flaggor programmatiskt.Detta tillvägagångssätt gör det lättare att dölja och visa statusfältet när användaren interagerar 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 ställer in WindowManager-flaggor (oavsett om det sker genom ett aktivitetstema eller på ett programmerat sätt), förblir flaggorna i kraft såvida inte appen tar bort dem.

Du kan användaFLAG_LAYOUT_IN_SCREEN för att ställa in aktivitetslayouten så att den använder samma skärmyta som är tillgänglig när du har aktiveratFLAG_FULLSCREEN. Detta förhindrar att ditt innehåll ändrar storlek när statusfältet döljs och visas.

Mörka statusfältet på Android 4.1 och högre

Du kan dölja statusfältet på Android 4.1 (API-nivå 16) och högre genom att använda setSystemUiVisibility().setSystemUiVisibility() ställer in UI-flaggor på den individuella vynsnivån; dessa inställningar aggregeras till fönstersnivån. Om du använder setSystemUiVisibility() för att ställa in UI-flaggor får du mer detaljerad kontroll över systemfältet än om du använder WindowManager-flaggor. Det här utdraget döljer statusfältet:

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

Notera följande:

  • När UI-flaggorna har rensats (t.ex. genom att du navigerar bort från aktiviteten) måste appen återställas om du vill dölja fälten igen.I avsnittet Svara på ändringar av UI-visibilitet finns en diskussion om hur du lyssnar på ändringar av UI-visibilitet så att din app kan svara i enlighet med detta.
  • Det spelar roll var du ställer in UI-flaggorna. Om du döljer systemfältet i aktivitetens onCreate() metod och användaren trycker på Home kommer systemfältet att visas igen. När användaren öppnar aktiviteten igen kommer onCreate() inte att anropas, så systemfältet förblir synligt. Om du vill att ändringar i systemets användargränssnitt ska kvarstå när användaren navigerar in och ut ur aktiviteten, ska du ställa in UI-flaggor ionResume()eller onWindowFocusChanged().
  • Metoden setSystemUiVisibility() har bara effekt om vyn som du anropar den från är synlig.
  • Navigering bort från vyn gör att flaggor som satts med setSystemUiVisibility() rensas.

Få innehåll att visas bakom statusfältet

På Android 4.1 och senare kan du ställa in att programmets innehåll ska visas bakom statusfältet, så att innehållet inte ändrar storlek när statusfältet döljs och visas.För att göra detta använder duSYSTEM_UI_FLAG_LAYOUT_FULLSCREEN.Du kan också behöva användaSYSTEM_UI_FLAG_LAYOUT_STABLE för att hjälpa programmet att bibehålla en stabil layout.

När du använder det här tillvägagångssättet blir det ditt ansvar att se till att kritiska delar av programmets användargränssnitt (t.ex. de inbyggda kontrollerna i ett kartprogram) inte blir täckta av systemfältet. Detta kan göra din app obrukbar. I de flesta fall kan du hantera detta genom att lägga till attributet android:fitsSystemWindows i din XML-layoutfil med inställningen true. Detta justerar utfyllnaden för den överordnade ViewGroup för att lämna utrymme för systemfönstren. Detta är tillräckligt för de flesta program.

I vissa fall kan du dock behöva ändra standardutfyllnaden för att få den önskade layouten för ditt program. Om du vill manipulera direkt hur ditt innehåll läggs ut i förhållande till systemfältet (som upptar ett utrymme som kallas ”content insets” i fönstret), åsidosätter du fitSystemWindows(Rect insets).Metoden fitSystemWindows() anropas av visningshierarkin när content insets för ett fönster har ändrats, så att fönstret kan justera sitt innehåll i enlighet med detta. Genom att åsidosätta den här metoden kan du hantera insatserna (och därmed din apps layout) som du vill.

Lämna ett svar

Din e-postadress kommer inte publiceras.