Questa lezione descrive come nascondere la barra di stato su diverse versioni di Android. Nascondere la barra di stato (e opzionalmente, la barra di navigazione) permette al contenuto di utilizzare più spazio sul display, fornendo così un’esperienza utente più coinvolgente.
La Figura 1 mostra un’applicazione con una barra di stato visibile:
Figura 1. Barra di stato visibile.
La figura 2 mostra un’app con una barra di stato nascosta. Notate che anche la barra delle azioni è nascosta. Non dovreste mai mostrare la barra delle azioni senza la barra di stato.
Figura 2. Barra di stato nascosta.
Nascondi la barra di stato su Android 4.0 e inferiori
Puoi nascondere la barra di stato su Android 4.0 (livello API 14) e inferiori impostandoWindowManager
flags. Puoi farlo programmaticamente o impostando un tema di attività nel file manifest della tua app. Impostare un tema di attività nel file manifest della tua app è l’approccio preferito se la barra di stato deve rimanere sempre nascosta nella tua app (anche se, a rigor di termini, puoi sovrascrivere programmaticamente il tema se vuoi). Per esempio:
<application ... android:theme="@android:style/Theme.Holo.NoActionBar.Fullscreen" > ...</application>
I vantaggi di usare un tema di attività sono i seguenti:
- È più facile da mantenere e meno soggetto a errori che impostare un flag programmaticamente.
- Si traduce in transizioni più fluide dell’UI, perché il sistema ha le informazioni di cui ha bisogno per rendere l’UI prima di istanziare l’attività principale della tua app.
In alternativa, puoi impostare programmaticamente i flag WindowManager
.Questo approccio rende più facile nascondere e mostrare la barra di stato mentre l’utente interagisce con la vostra 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); } ...}
Quando impostate i flag WindowManager
(sia attraverso un tema di attività che programmaticamente), i flag rimangono in vigore a meno che la vostra app li cancelli.
Puoi usareFLAG_LAYOUT_IN_SCREEN
per impostare il layout della tua attività per usare la stessa area dello schermo che è disponibile quando hai abilitatoFLAG_FULLSCREEN
. Questo evita che il tuo contenuto si ridimensioni quando la barra di stato si nasconde e si mostra.
Nascondi la barra di stato su Android 4.1 e superiori
Puoi nascondere la barra di stato su Android 4.1 (livello API 16) e superiori usando setSystemUiVisibility()
.setSystemUiVisibility()
imposta i flag UI a livello di singola vista; queste impostazioni sono aggregate a livello di finestra. UsandosetSystemUiVisibility()
per impostare i flag dell’interfaccia utente si ha un controllo più granulare sulle barre di sistema rispetto all’uso dei flagWindowManager
. Questo snippet nasconde la barra di stato:
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();
Nota quanto segue:
- Una volta che le flags UI sono state cancellate (per esempio, navigando lontano dall’attività), la tua app deve resettarle se vuoi nascondere di nuovo le barre.Vedi Rispondere ai cambiamenti di visibilità dell’UI per una discussione su come ascoltare i cambiamenti di visibilità dell’UI in modo che la tua applicazione possa rispondere di conseguenza.
- Dove imposti i flag dell’UI fa una differenza. Se nascondi le barre di sistema nel metodo
onCreate()
della tua attività e l’utente preme Home, le barre di sistema riappariranno. Quando l’utente riapre l’attività,onCreate()
non verrà chiamato, quindi le barre di sistema rimarranno visibili. Se vuoi che i cambiamenti dell’interfaccia utente del sistema persistano mentre l’utente naviga dentro e fuori la tua attività, imposta i flag dell’interfaccia inonResume()
oonWindowFocusChanged()
. - Il metodo
setSystemUiVisibility()
ha effetto solo se la vista da cui lo chiami è visibile. - Navigando lontano dalla vista, i flag impostati con
setSystemUiVisibility()
vengono cancellati.
Fare apparire il contenuto dietro la barra di stato
Su Android 4.1 e superiori, puoi impostare il contenuto della tua applicazione in modo che appaia dietro la barra di stato, in modo che il contenuto non si ridimensioni quando la barra di stato si nasconde e si mostra.Per fare questo, usaSYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
.Potresti anche aver bisogno di usareSYSTEM_UI_FLAG_LAYOUT_STABLE
per aiutare la tua applicazione a mantenere un layout stabile.
Quando usi questo approccio, diventa tua responsabilità assicurare che le parti critiche dell’interfaccia utente della tua applicazione (per esempio, i controlli integrati in un’applicazione Mappe) non finiscano per essere coperte dalle barre di sistema. Questo potrebbe rendere la vostra app inutilizzabile. Nella maggior parte dei casi puoi gestire questo problema aggiungendo l’attributo android:fitsSystemWindows
al tuo file di layout XML, impostato atrue
. Questo regola il padding del genitore ViewGroup
per lasciare spazio alle finestre di sistema. Questo è sufficiente per la maggior parte delle applicazioni.
In alcuni casi, tuttavia, potrebbe essere necessario modificare il padding di default per ottenere il layout desiderato per la tua applicazione. Per manipolare direttamente come il vostro contenuto si dispone rispetto alle barre di sistema (che occupano uno spazio conosciuto come “content insets” della finestra), sovrascrivete fitSystemWindows(Rect insets)
.Il metodo fitSystemWindows()
è chiamato dalla gerarchia della vista quando i content insets di una finestra sono cambiati, per permettere alla finestra di regolare il suo contenuto di conseguenza. Sovrascrivendo questo metodo potete gestire gli inserti (e quindi il layout della vostra applicazione) come volete.