Symbolleiste überlappt sich unterhalb der Statusleiste


168

Ich möchte die Appcompat v21-Symbolleiste in meiner Aktivität haben. Die Symbolleiste, die ich implementiere, überlappt sich jedoch unterhalb der Statusleiste. Wie kann ich es reparieren?

überlappende Symbolleiste

Hier ist das Aktivitätslayout 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>

Symbolleistenansicht:

<?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" />

Themenstil:

<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>

Wie haben Sie ThemeIhre Anwendung angepasst ? poste sie.
SilentKnight

in können CoordinatorLayoutSie dies versuchen: stackoverflow.com/a/47906087/2201814
MHSFisher

Für diejenigen, die mit dem Problem mit androidx.coordinatorlayout.widget.CoordinatorLayout als Root-Ansicht konfrontiert sind, sollte android: fitSystemWindows = "false" festgelegt werden. Dies hat bei mir funktioniert ... wie von einem der SO-Benutzer unten vorgeschlagen.
Muahmmad Tayyib

Antworten:


273

Verwenden Sie android:fitsSystemWindows="true"in der Stammansicht Ihres Layouts (in Ihrem Fall LinearLayout). Und android:fitsSystemWindowsist ein

Internes Attribut zum Anpassen des Ansichtslayouts basierend auf Systemfenstern wie der Statusleiste. Wenn dies der Fall ist, wird der Abstand dieser Ansicht angepasst, um Platz für die Systemfenster zu lassen. Wird nur wirksam, wenn sich diese Ansicht in einer nicht eingebetteten Aktivität befindet.

Muss ein boolescher Wert sein, entweder "true" oder "false".

Dies kann auch ein Verweis auf eine Ressource (in der Form "@ [Paket:] Typ: Name") oder ein Themenattribut (in der Form "? [Paket:] [Typ:] Name") sein, die einen Wert dieses Typs enthält .

Dies entspricht dem globalen Attribut Ressourcensymbol fitSystemWindows.


22
@AimanB Sie können es global einstellen, indem Sie im Thema als <item name="android:fitsSystemWindows">true</item>
Samir

13
@ Samir dies hat eine Nebenwirkung, wie in diesem Kommentar berichtet
Sufian

9
Dieses Problem tritt auch auf, nachdem wir android: fitSystemWindows = "true" zum Root-Layout hinzugefügt haben. Wenn Ihr Stil <item name = "android: statusBarColor"> @ android: color / transparent </ item> this enthält. Gerade erwähnt für diejenigen, die diese Frage lesen.
Sakkeer Hussain

3
Ich habe das gleiche Problem und das Android: fitSystemWindows = "true" hat bei mir nicht funktioniert. Jeder hat Lösungen, die Sie bitte posten.
Jatin

1
Diese Antwort hat mein Problem behoben. Aber jetzt finde ich alle Android Toasts mit 0 Polsterung!
kds23

18

Setzen Sie dies einfach auf die Datei v21 / styles.xml

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

und sei sicher

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

1
Wenn Sie so etwas wie eine App haben: layout_behavior = "@ string / appbar_scrolling_view_behavior", entfernen Sie es! @ TheHunter
Zahra.HY

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

10

Für mich war das Problem, dass ich etwas aus einem Beispiel kopiert und verwendet habe

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

Nur das Entfernen dieses Problems hat mein Problem behoben.


10

Keine der Antworten hat bei mir funktioniert, aber dies hat schließlich funktioniert, nachdem android:fitSystemWindowsich die Stammansicht festgelegt habe (ich habe diese in Stilen v21 festgelegt):

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

Stellen Sie sicher, dass Sie nicht die folgende Zeile haben, wie AS es standardmäßig ausdrückt:

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

6

Keine der Antworten hat bei mir funktioniert, aber das hat schließlich funktioniert, nachdem ich festgelegt habe:

android:fitsSystemWindows="false"

In der übergeordneten Aktivitätslayoutdatei wird dies an vielen Stellen nicht empfohlen, aber es funktioniert für mich und spart meinen Tag


Dies funktionierte auch für mich, wenn meine Stammansicht im Layout ein androidx.coordinatorlayout.widget.CoordinatorLayoutTyp war.
Faheem Ezani

5

Ich habe alle unten genannten Zeilen aus /res/values-v21/styles.xml entfernt und jetzt funktioniert es einwandfrei .

 <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

Laut Google Docs sollten wir das Attribut fitSystemWindows nicht im App-Design verwenden, sondern es soll in Layoutdateien verwendet werden. Die Verwendung in Themen kann zu Problemen bei Toastnachrichten führen.

Überprüfen Sie das Problem hier Problem und das Beispiel des hier verursachten Problems

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

Beispiel für die Verwendung der richtigen Methode, die auch mit windowTranslucentStatus gut funktioniert .

<?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

Entfernen Sie die folgenden Zeilen aus Stil oder Stil (21).

<item name="android:windowDrawsSystemBarBackgrounds">true</item>
<item name="android:statusBarColor">@color/colorPrimaryDark</item>
<item name="android:windowTranslucentStatus">false</item>
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.