Barra degli strumenti sovrapposta sotto la barra di stato


168

Voglio avere la barra degli strumenti di appcompat v21 nella mia attività. Ma la barra degli strumenti che sto implementando si sovrappone sotto la barra di stato. Come posso ripararlo?

barra degli strumenti sovrapposta

Ecco il layout di attività xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical">

    <include
        android:id="@+id/toolbar"
        layout="@layout/toolbar" />

    <FrameLayout
        android:id="@+id/container"
        android:layout_width="fill_parent"
        android:layout_height="0dp"
        android:layout_weight="1" />
</LinearLayout>

Vista della barra degli strumenti:

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/toolbar"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:minHeight="?attr/actionBarSize"
    android:background="?attr/colorPrimary" />

Stile del tema:

<style name="AppTheme" parent="MaterialNavigationDrawerTheme.Light.DarkActionBar">
    <item name="colorPrimary">@color/primary</item>
    <item name="colorPrimaryDark">@color/primary_dark</item>
    <item name="colorAccent">@color/accent</item>
</style>

Come hai personalizzato la Themetua candidatura? postali.
SilentKnight

in CoordinatorLayoutsi può provare questo: stackoverflow.com/a/47906087/2201814
MHSFisher

per coloro che stanno affrontando il problema con androidx.coordinatorlayout.widget.CoordinatorLayout come root view dovrebbe impostare android: fitsSystemWindows = "false" .questo ha funzionato per me ... come suggerito da un utente SO di seguito ..
Muahmmad Tayyib

Risposte:


273

Utilizzare android:fitsSystemWindows="true"nella vista principale del layout (LinearLayout nel proprio caso). Ed android:fitsSystemWindowsè un

attributo interno per regolare il layout della vista in base alle finestre di sistema come la barra di stato. Se vero, regola il riempimento di questa vista per lasciare spazio alle finestre di sistema. Avrà effetto solo se questa vista si trova in un'attività non incorporata.

Deve essere un valore booleano, "vero" o "falso".

Questo può anche essere un riferimento a una risorsa (nella forma "@ [pacchetto:] tipo: nome") o all'attributo del tema (nella forma "? [Pacchetto:] [tipo:] nome") contenente un valore di questo tipo .

Ciò corrisponde al simbolo della risorsa dell'attributo globale fitsSystemWindows.


22
@AimanB puoi impostarlo a livello globale impostando il tema come <item name="android:fitsSystemWindows">true</item>
Samir il

13
@Samir questo ha un effetto collaterale come riportato in questo commento
Sufian,

9
Questo problema arriverà anche dopo aver aggiunto android: fitsSystemWindows = "true" al layout di root, se il tuo stile contiene <item name = "android: statusBarColor"> @ android: color / transparent </item> questo. Appena menzionato per coloro che stanno leggendo questa domanda.
Sakkeer Hussain,

3
Sto riscontrando lo stesso problema e Android: fitsSystemWindows = "true" non ha funzionato per me. Qualcuno ha soluzioni che si prega di pubblicare.
Jatin,

1
Questa risposta ha risolto il mio problema. Ma ora trovo tutti i toast Android con 0 padding!
kds23,

18

Basta impostarlo sul file v21 / styles.xml

 <item name="android:windowDrawsSystemBarBackgrounds">true</item>
 <item name="android:statusBarColor">@color/colorPrimaryDark</item>

ed essere sicuro

 <item name="android:windowTranslucentStatus">false</item>

1
se hai qualcosa come app: layout_behavior = "@ string / appbar_scrolling_view_behavior", rimuovilo! @TheHunter
Zahra.HY,

set <item name = "android: windowTranslucentStatus"> false </item>
Zahra.HY

10

Per me, il problema era che ho copiato qualcosa da un esempio e usato

<item name="android:windowTranslucentStatus">true</item>

solo rimuovendo questo risolto il mio problema.


10

Nessuna delle risposte ha funzionato per me, ma questo è quello che alla fine ha funzionato dopo aver impostato android:fitSystemWindowsla vista radice (le ho impostate negli stili v21):

<item name="android:windowDrawsSystemBarBackgrounds">true</item>
<item name="android:windowTranslucentStatus">false</item>

Assicurati di non avere la seguente riga come dice AS per impostazione predefinita:

<item name="android:statusBarColor">@android:color/transparent</item>

6

Nessuna delle risposte ha funzionato per me, ma questo è quello che alla fine ha funzionato dopo aver impostato:

android:fitsSystemWindows="false"

Nel file di layout dell'attività genitore non è suggerito in molti luoghi ma è un lavoro per me e mi salva la giornata


Questo ha funzionato anche per me quando la mia vista principale nel layout era un androidx.coordinatorlayout.widget.CoordinatorLayouttipo.
Faheem Ezani,

5

Ho rimosso tutte le righe menzionate di seguito da /res/values-v21/styles.xml e ora funziona bene.

 <item name="android:windowDrawsSystemBarBackgrounds">true</item>
 <item name="android:statusBarColor">@android:color/transparent</item>


 <item name="windowActionBar">false</item>
 <item name="android:windowDisablePreview">true</item>

 <item name="windowNoTitle">true</item>

 <item name="android:fitsSystemWindows">true</item>

0

Secondo i documenti di Google, non dovremmo usare l'attributo fitsSystemWindows nel tema dell'app, è destinato all'uso nei file di layout. L'uso dei temi può causare problemi nei messaggi di toast.

Controlla Problema qui ed esempio di problema causato qui

<item name="android:fitsSystemWindows">true</item>

Esempio di utilizzo del modo corretto e che funziona bene anche con windowTranslucentStatus .

<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout 
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/drawer_layout"

android:fitsSystemWindows="true"

android:layout_width="match_parent"
android:layout_height="match_parent"
> 


<include layout="@layout/toolbar"
     android:layout_width="match_parent"
     android:layout_height="wrap_content">
</include>

<android.support.design.widget.NavigationView
    android:id="@+id/nav_view"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:layout_gravity="start"
    android:fitsSystemWindows="true"
    android:background="@color/white"
    android:animateLayoutChanges="true"
    app:headerLayout="@layout/navigation_drawer_header"
    app:menu="@menu/navigation_drawer_menu" />

</android.support.v4.widget.DrawerLayout>

0

Rimuovi le righe sottostanti dallo stile o dallo stile (21)

<item name="android:windowDrawsSystemBarBackgrounds">true</item>
<item name="android:statusBarColor">@color/colorPrimaryDark</item>
<item name="android:windowTranslucentStatus">false</item>
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.