Questa lezione spiega come nascondere la barra di stato su diverse versioni di Android. Se nascondi la barra di stato (e, facoltativamente, anche la barra di navigazione) utilizzano più spazio di visualizzazione, offrendo così un'esperienza utente più immersiva.
La Figura 1 mostra un'app con una barra di stato visibile:
La figura 2 mostra un'app con una barra di stato nascosta. Tieni presente che anche la barra delle azioni è nascosta. Non dovresti mai mostrare la barra delle azioni senza la barra di stato.
Nascondi la barra di stato su Android 4.0 e versioni precedenti
Puoi nascondere la barra di stato su Android 4.0 (livello API 14) e versioni precedenti impostando
WindowManager
flag. Puoi farlo in modo programmatico oppure
impostare un tema di attività nel file manifest della tua app. L'impostazione di un tema di attività nell'app
del file manifest è l'approccio preferito se la barra di stato deve rimanere
nascosto nella tua app (anche se in realtà puoi sostituire in modo programmatico
tema, se volessi). Ad esempio:
<application ... android:theme="@android:style/Theme.Holo.NoActionBar.Fullscreen" > ... </application>
I vantaggi dell'utilizzo di un tema attività sono i seguenti:
- È più facile da gestire e meno soggetto a errori rispetto all'impostazione di un flag in modo programmatico.
- Ciò si traduce in transizioni più fluide all'interfaccia utente perché il sistema dispone delle informazioni di cui ha bisogno per eseguire il rendering dell'UI prima di creare un'istanza per l'attività principale dell'app.
In alternativa, puoi impostare in modo programmatico i flag WindowManager
.
Questo approccio semplifica l'occultamento e la visualizzazione della barra di stato durante l'interazione dell'utente con
la tua 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 imposti i flag WindowManager
(tramite un tema di attività o
in modo programmatico), i flag rimangono validi a meno che l'app non li cancelli.
Puoi utilizzare
FLAG_LAYOUT_IN_SCREEN
per impostare il layout delle attività in modo che utilizzi la stessa area dello schermo disponibile quando attivi
FLAG_FULLSCREEN
. In questo modo
il ridimensionamento dei contenuti quando la barra di stato viene nascosta e visualizzata.
Nascondi la barra di stato su Android 4.1 e versioni successive
Puoi nascondere la barra di stato su Android 4.1 (livello API 16) e versioni successive tramite
utilizzando setSystemUiVisibility()
.
setSystemUiVisibility()
imposta flag UI su
a livello di singola vista; e queste impostazioni sono aggregate
a livello di finestra. Utilizzo
setSystemUiVisibility()
per impostare i flag UI
offre un controllo più granulare sulle barre di sistema rispetto all'uso
WindowManager
flag. 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:
- Una volta cancellati i flag dell'interfaccia utente (ad esempio, uscendo attività), l'app dovrà reimpostarle se vuoi nascondere nuovamente le barre. Consulta l'articolo Risposta alle modifiche della visibilità nell'interfaccia utente per un discussione su come ascoltare le modifiche alla visibilità dell'interfaccia utente affinché la tua app devono rispondere di conseguenza.
- Il punto in cui imposti i flag UI fa la differenza. Se nascondi le barre di sistema nella
onCreate()
e l'utente preme Home, le barre di sistema verranno riapparire. Quando l'utente riapre l'attività,onCreate()
non verranno chiamati, quindi le barre di sistema rimarranno visibili. Se vuoi che vengano apportate modifiche all'interfaccia utente vengono mantenuti man mano che l'utente entra ed esce dalla tua attività, imposta i flag UI nelleonResume()
oonWindowFocusChanged()
. - Il metodo
setSystemUiVisibility()
ha effetto solo se la vista da cui lo chiami è visibile. - L'uscita dalla visualizzazione causa flag
imposta con
setSystemUiVisibility()
da cancellare.
Visualizzare i contenuti dietro la barra di stato
Su Android 4.1 e versioni successive, puoi impostare i contenuti della tua applicazione in modo che
la barra di stato in modo che i contenuti non vengano ridimensionati mentre la barra di stato viene nascosta e visualizzata.
A questo scopo, utilizza
SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
.
Potresti dover usare anche
SYSTEM_UI_FLAG_LAYOUT_STABLE
per aiutare la tua app a mantenere
e stabile.
Quando utilizzi questo approccio, diventa tua responsabilità garantire che le parti critiche
dell'interfaccia utente dell'app (ad esempio, i controlli integrati di un'applicazione Maps)
essere coperta dalle barre di sistema. Questa operazione potrebbe rendere inutilizzabile la tua app. Nella maggior parte dei casi puoi
per gestire la situazione aggiungendo l'attributo android:fitsSystemWindows
al file di layout XML, impostato su
true
. In questo modo viene regolata la spaziatura interna dell'elemento ViewGroup
principale.
per lasciare spazio per le finestre di sistema. Questo è sufficiente per la maggior parte delle applicazioni.
In alcuni casi, tuttavia, potrebbe essere necessario modificare la spaziatura interna predefinita per ottenere
layout della tua app. Per manipolare direttamente il modo in cui
i contenuti si presentano rispetto alle barre di sistema (che occupano uno spazio noto come
"insiemi di contenuti"), sostituisci fitSystemWindows(Rect insets)
.
Il metodo fitSystemWindows()
viene chiamato
visualizzare la gerarchia quando i riquadri di contenuti di una finestra sono cambiati, per consentire alla finestra di
ne modificano i contenuti di conseguenza. Se esegui l'override di questo metodo puoi gestire
(e quindi il layout dell'app) in base alle tue esigenze.