it-swarm.com.de

Die Statusleiste wird weiß und zeigt keinen Inhalt dahinter

Ich probiere AppCompat auf Marshmallow aus. Und ich möchte eine transparente Statusleiste haben, die jedoch weiß wird. Ich habe ein paar Lösungen ausprobiert, aber sie funktionierten nicht für mich ( Transparente Statusleiste funktioniert nicht mit windowTranslucentNavigation = "false" , Lollipop: Zeichne hinter statusBar mit der Farbe transparent ). Hier ist verwandter Code.

Meine styles.xml 

<style name="Bacon" parent="Theme.Bacon"/>

<style name="Theme.Bacon" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="colorPrimary">@color/theme_primary</item>
    <item name="colorPrimaryDark">@color/theme_primary_dark</item>
    <item name="colorAccent">@color/theme_accent</item>
    <item name="windowActionBar">false</item>
    <item name="windowActionBarOverlay">true</item>
    <item name="windowNoTitle">true</item>
    <item name="Android:windowBackground">@color/background_material_light</item>  
</style>

<style name="Theme.Bacon.Detail" parent="Bacon"/>

v21

<style name="Bacon" parent="Theme.Bacon">
    <item name="Android:windowDrawsSystemBarBackgrounds">true</item>
</style>

<style name="Theme.Bacon.Detail" parent="Bacon">
    <item name="Android:statusBarColor">@Android:color/transparent</item>
</style>

Aktivität

<FrameLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:fitsSystemWindows="true">

<Android.support.v4.view.ViewPager
    Android:id="@+id/pager"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:fitsSystemWindows="true" />

</FrameLayout>

Fragment

<Android.support.design.widget.CoordinatorLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:app="http://schemas.Android.com/apk/res-auto"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:fitsSystemWindows="true">

<Android.support.design.widget.AppBarLayout
    Android:id="@+id/appbar"
    Android:layout_width="match_parent"
    Android:layout_height="192dp"
    Android:fitsSystemWindows="true"
    Android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">

    <Android.support.design.widget.CollapsingToolbarLayout
        Android:id="@+id/collapsing_toolbar"
        Android:layout_width="match_parent"
        Android:layout_height="match_parent"
        Android:fitsSystemWindows="true"
        app:contentScrim="?attr/colorPrimary"
        app:expandedTitleMarginBottom="32dp"
        app:expandedTitleMarginEnd="64dp"
        app:expandedTitleMarginStart="48dp"
        app:layout_scrollFlags="scroll|exitUntilCollapsed"
        app:statusBarScrim="@color/black_trans80">

        <ImageView
            Android:id="@+id/photo"
            Android:layout_width="match_parent"
            Android:layout_height="match_parent"
            Android:contentDescription="@string/photo"
            Android:fitsSystemWindows="true"
            Android:scaleType="centerCrop"
            app:layout_collapseMode="parallax" />

        <Android.support.v7.widget.Toolbar
            Android:id="@+id/anim_toolbar"
            Android:layout_width="match_parent"
            Android:layout_height="?attr/actionBarSize"
            app:layout_collapseMode="pin"
            app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />
    </Android.support.design.widget.CollapsingToolbarLayout>
</Android.support.design.widget.AppBarLayout>

 enter image description here

68
pt2121

Ich habe mein Problem behoben, indem ich mein Aktivitätslayout von FrameLayout in RelativeLayout geändert habe. Danke an alle, die versucht haben zu helfen!

<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
  Android:layout_width="match_parent"
  Android:layout_height="match_parent"
  Android:background="@Android:color/transparent">

    <Android.support.v4.view.ViewPager
      Android:id="@+id/pager"
      Android:layout_width="match_parent"
      Android:layout_height="match_parent"
      Android:background="@color/theme_primary_dark"
      Android:fitsSystemWindows="true" />

</RelativeLayout>

Probieren Sie Hierarchie-Viewer oder ViewInspector aus. Diese Tools können Ihnen helfen.

5
pt2121

Ich habe die Antwort in diesem Link gefunden: Statusleiste Farbe ändert sich nicht mit dem relativen Layout als Stammelement

Es stellt sich also heraus, dass wir das entfernen müssen 

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

in styles.xml (v21). Und es funktioniert gut für mich.

133
Phoenix Wang

(Etwas spät zur Party, aber es könnte jemandem helfen)

Ich hatte genau das gleiche Problem. Irgendwie waren einige Aktivitäten normal, während neue, die ich erstellt hatte, weiße Statusleiste anstelle von colorPrimaryDark value zeigten.

Nachdem ich einige Tipps ausprobiert hatte, fiel mir auf, dass bei den normal funktionierenden Aktivitäten CoordinatorLayout als Stamm des Layouts verwendet wurde, während ich es bei den anderen durch reguläre Layouts ersetzt hatte, da ich die von ( CoordinatorLayout.

Die Lösung besteht also darin, CoordinatorLayout zum Stammlayout zu machen und dann darin den alten Layoutstamm hinzuzufügen. Hier ist ein Beispiel:

<?xml version="1.0" encoding="utf-8"?>
<Android.support.design.widget.CoordinatorLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
  xmlns:app="http://schemas.Android.com/apk/res-auto"
  Android:layout_width="match_parent"
  Android:layout_height="match_parent"
  Android:fitsSystemWindows="true">

  <LinearLayout
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:orientation="vertical">

    <Android.support.design.widget.AppBarLayout
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        Android:theme="@style/AppTheme.AppBarOverlay">

        <Android.support.v7.widget.Toolbar
            Android:id="@+id/toolbar"
            Android:layout_width="match_parent"
            Android:layout_height="?attr/actionBarSize"
            Android:background="?attr/colorPrimary"
            app:popupTheme="@style/AppTheme.PopupOverlay" />

    </Android.support.design.widget.AppBarLayout>

    <!-- your activity content here-->


  </LinearLayout>
</Android.support.design.widget.CoordinatorLayout>

BITTE BEACHTEN SIE, dass diese Lösung ohne Android:fitsSystemWindows="true" nicht für mich funktioniert.

Getestet an Lollipop und Marshmallow 

92
Mauro Banze
 <style name="AppTheme.NoActionBar">
        <item name="windowActionBar">false</item>
        <item name="windowNoTitle">true</item>
        <item name="Android:windowDrawsSystemBarBackgrounds">true</item>
        <item name="Android:statusBarColor">@color/colorPrimaryDark</item>
    </style

Ersetzen Sie dies einfach, StatusBarColor sollte Ihre erwartete Farbe sein und nicht TRANSPARENT

10
Shrini Jaiswal

Nach erfolglosem Ausprobieren aller oben genannten Punkte stellte ich fest, dass das Problem durch das Setzen eines Themas explizit behoben wurde.

setTheme(R.style.AppTheme);

Das muss vor dem super.OnCreate () in Ihrer Aktivität gehen.

9
James Britton

Fügen Sie dies in Ihrer style.xml hinzu

    <item name="Android:windowTranslucentStatus">true</item>
    <item name="Android:statusBarColor">@Android:color/transparent</item>

und dies in Ihrem onCreate ();

 getWindow().getDecorView().setSystemUiVisibility(
       View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
7
Michele Lacorte

Fügen Sie dieses Element einfach in Ihre v21\styles.xml ein:

wahr

Es sollte so aussehen :

<style name="AppTheme.NoActionBar">
    <item name="windowActionBar">false</item>
    <item name="windowNoTitle">true</item>
    <item name="Android:windowDrawsSystemBarBackgrounds">true</item>
    <item name="Android:windowTranslucentStatus">true</item>
</style>

7
Rami

Ich stand vor demselben Problem. Was ich getan habe, war, dass in der Datei "v21/styles.xml" der Wert "true" geändert wurde:

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

zu:

 <item name="windowDrawsSystemBarBackgrounds">false</item>
6
Degomos

Entfernen Sie einfach das folgende Tag aus dem Stil v21 @Android: Farbe/transparent

Das funktioniert für mich.

4
Shendre Kiran

Sie müssen diese Eigenschaft Ihrem Stil hinzufügen, um den Inhalt anzuzeigen

<item name="Android:windowLightStatusBar" tools:ignore="NewApi">true</item>
3
Andres Paez

Besserer Ansatz

Überprüfen Sie Ihre style.xml-Datei, in der sich Ihr NoActionBar-Design befindet. Vergewissern Sie sich, dass das übergeordnete Element als Theme.AppCompat.NoActionBar definiert ist, und passen Sie es auch an, indem Sie Ihr Farbschema hinzufügen. Legen Sie schließlich Ihre Themen nach Bedarf fest.

Unten finden Sie ein Beispiel meiner Datei styles.xml (ActionBar + NoActionBar). 

<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
</style>

<!-- No ActionBar application theme. -->
<style name="AppTheme.NoActionBar" parent="Theme.AppCompat.NoActionBar">
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
    <item name="windowActionBar">false</item>
    <item name="windowNoTitle">true</item>
</style>
3
Nilesh Mahant

Für mich funktionierte es folgendermaßen: 

  1. Setze das Design .NoActionBar
  2. Die Symbolleiste in Android.support.design.widget.AppBarLayout einschließen
  3. Machen Sie Android.support.design.widget.CoordinatorLayout als übergeordnetes Layout. 

Im Wesentlichen ist es der dritte Schritt, der die Statusleiste in der colorPrimaryDark zeichnet, ansonsten wird sie nicht gezeichnet, wenn Sie das NoActionBar-Design verwenden. Der zweite Schritt gibt Ihrer Symbolleiste das an Überlagerung

2
priyankvex

Ich bin nicht sicher, ob es spät ist, aber ich hoffe, es hilft jemandem. * Erstellen Sie eine gefälschte Ansicht mit transparentem Hintergrund, die zum Layout passt, und erstellen Sie ein Koordinatorlayout als Hauptlayoutelement.

<View
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:background="@Android:color/transparent"
    Android:fitsSystemWindows="true" />


<ImageView
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:fitsSystemWindows="true"
    Android:scaleType="centerCrop"
    Android:src="@drawable/something" />

<FrameLayout
    Android:layout_width="match_parent"
    Android:layout_height="match_parent">

   .... YOUR LAYOUT

1
vahidlazio
<item name="Android:statusBarColor">@Android:color/transparent</item>

Diese Codezeile wird in values ​​/ styles/styles.xml (v21) angezeigt. Entfernen Sie es und das löst das Problem

Link zu dieser Antwort

1
Phares

[Output]

Erweitern Sie im Projektfenster das Verzeichnis res -> values ​​-> styles.

Öffnen Sie die Datei styles.xml (v21).

BENUTZEN SIE EINEN VON UNTEN WEGEN

  1. Ändern Sie true in false in der Android:windowDrawsSystemBarBackgrounds-Eigenschaft.
  2. Ändern Sie @Android: color/transparent in @ color/colorPrimaryDark in der Android:statusBarColor-Eigenschaft.
  3. Entfernen Sie die Eigenschaftszeile Android:statusBarColor.
0
Ketan Ramani

Überprüfen Sie die in styles-21 implementierten Farbschemata

0
Shivegeeky

Für Styles v23 

 <style name="MyTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="Android:windowLightStatusBar">true</item>
    <item name="Android:statusBarColor">@Android:color/white</item>
</style>

Für Styles v21

<style name="MyTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="Android:windowTranslucentStatus">true</item>
    <item name="Android:statusBarColor">@Android:color/white</item>
</style>
0
Ankit Aman

Wenn Sie RelativeLayout/CoordinatorLayout verwenden, ist dies die Lösung, die für mich funktioniert hat:

Sie müssen verwenden 

  • KoordinatorLayout
  • AppBarLayout

Rember für die Verwendung von CoordinatorLayout anstelle von RelativeLayout (die Leistung ist besser und funktioniert perfekt mit AppBarLayout)

So sollte dein Fragment beginnen

<?xml version="1.0" encoding="utf-8"?>
<Android.support.design.widget.CoordinatorLayout
xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:app="http://schemas.Android.com/apk/res-auto"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:background="@Android:color/background_light"
Android:fitsSystemWindows="true"
>

<Android.support.design.widget.AppBarLayout
    Android:id="@+id/main.appbar"
    Android:layout_width="match_parent"
    Android:layout_height="300dp"
    Android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
    Android:fitsSystemWindows="true"
    >
    ...

Gute Codierung!

0

Meine Vermutung ist, dass dies durch Ihren Android:windowBackground verursacht wird. Ist @color/background_material_light ein Verweis auf Weiß?

0
hanspeide

Überprüfen Sie dies Die Symbolleiste wird weiß - AppBar wird nach dem Scrollen vom Bildschirm nicht gezeichnet

https://code.google.com/p/Android/issues/detail?id=178037#c19

Ich verwende Bibliotheken 23.0.0. und der Fehler tritt immer noch auf. 

Umgehung dafür ist das Hinzufügen von Ansichten, die fast keinen Platz beanspruchen und unsichtbar sein können. Siehe die Struktur unten.

<Android.support.v4.widget.NestedScrollView
    app:layout_behavior="@string/appbar_scrolling_view_behavior">

</Android.support.v4.widget.NestedScrollView>

<Android.support.design.widget.AppBarLayout>

    <Android.support.v7.widget.Toolbar
        app:layout_scrollFlags="scroll|enterAlways" />

    <Android.support.design.widget.TabLayout
        app:layout_scrollFlags="scroll|enterAlways" />

    <View
        Android:layout_width="match_parent"
        Android:layout_height=".3dp"
        Android:visibility="visible"/>

</Android.support.design.widget.AppBarLayout>

Diese Fragen auf Stackoverflow.com beziehen sich auch auf diesen Fehler: CoordinatorLayout Toolbar bei Eingabe bis zur vollen Höhe unsichtbarAppBarLayout - Das Layout ist manchmal unsichtbar, sobald es in view (auch wenn es nicht eingegeben wird)

0
clickdroid

Wenn Ihre v21/styles.xml enthält

<resources>
    <style name="AppTheme.NoActionBar">
        <item name="windowActionBar">false</item>
        <item name="windowNoTitle">true</item>
        <item name="Android:statusBarColor">@Android:color/transparent</item>
    </style>
</resources>

Dann Entfernen oder Kommentar unter der Zeile oder Ändern der Farbe der Statusleiste

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

Es funktioniert gut. Hoffe das ist hilfreich. Vielen Dank.

0
sahu