Ich probiere AppCompat auf Marshmallow aus. Und ich möchte eine transparente Statusleiste, die jedoch weiß wird. Ich habe ein paar Lösungen ausprobiert, aber sie haben bei mir nicht funktioniert ( Transparente Statusleiste funktioniert nicht mit windowTranslucentNavigation = "false" , Lollipop: Zeichnen Sie hinter statusBar, dessen Farbe auf transparent eingestellt ist ). 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>
android
android-support-library
android-appcompat
androiddesignsupport
android-6.0-marshmallow
pt2121
quelle
quelle
Antworten:
Ich habe die Antwort in diesem Link gefunden: Die Farbe der Statusleiste ändert sich nicht mit dem relativen Layout als Stammelement
Es stellt sich also heraus, dass wir das entfernen müssen
in styles.xml (v21). Und es funktioniert gut für mich.
quelle
(Ein bisschen 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 habe, eine weiße Statusleiste anstelle eines
colorPrimaryDark
Werts zeigten .Nachdem ich einige Tipps ausprobiert hatte, bemerkte ich, dass die normal arbeitenden Aktivitäten alle
CoordinatorLayout
als Wurzel des Layouts verwendet wurden, während ich sie für die anderen durch reguläre Layouts ersetzt hatte, da ich die von (bereitgestellten Funktionen usw.) nicht benötigteCoordinatorLayout
.Die Lösung besteht also darin,
CoordinatorLayout
das Root-Layout zu erstellen und dann darin Ihr früheres Layout-Root hinzuzufügen. Hier ist ein Beispiel:BITTE BEACHTEN SIE, dass ohne
android:fitsSystemWindows="true"
diese Lösung bei mir nicht funktioniert.Getestet auf Lollipop und Marshmallow
quelle
android:fitsSystemWindows="true"
zuCoordinatorLayout
in Android 8.CoordinatorLayout
als ich das gleiche Problem hatte und die spezifische Eigenschaft, die dies für michandroid:fitsSystemWindows="true"
android:fitsSystemWindows="true"
hat bei mir nicht funktioniert. Was mein Problem gelöst hat, ist die Verwendung eines Themas, das nichtAppTheme.NoActionBar
in der Aktivität mit a enthalten istCoordinatorLayout
. Ich weiß nicht, warum das das Problem behoben hat.CoordinatorLayout
oderandroid:fitsSystemWindows="true"
keiner arbeitet für mich.quelle
Sie müssen diese Eigenschaft Ihrem Stil hinzufügen, um den Inhalt anzuzeigen
quelle
Fügen Sie dies in Ihre style.xml ein
und das in deinem onCreate ();
quelle
Nachdem ich alle oben genannten Punkte erfolglos ausprobiert hatte, stellte ich fest, dass das Problem durch explizites Festlegen des Themas behoben wurde.
Das muss vor dem super.OnCreate () in Ihrer Aktivität gehen.
quelle
Fügen Sie dieses Element einfach in Ihre v21 \ styles.xml ein:
wahr
Es sollte so aussehen :
quelle
false
Werten in den letzten 2 Elementen funktioniert . Seltsam, aber danke.Ich stand vor dem gleichen Problem. Ich habe in der Datei "v21 / styles.xml" den Wert true geändert:
zu:
quelle
Sie sehen diese Codezeile in values / styles / styles.xml (v21). Entfernen Sie es und das löst das Problem
Link zu dieser Antwort
quelle
Ich habe mein Problem behoben, indem ich mein Aktivitätslayout von FrameLayout in RelativeLayout geändert habe. Vielen Dank an alle, die versucht haben zu helfen!
Versuchen Sie es mit Hierarchie-Viewer oder ViewInspector . Diese Tools könnten Ihnen helfen.
quelle
Entfernen Sie einfach das folgende Tag aus Style v21 @android: color / transparent
Das funktioniert bei mir.
quelle
Besserer Ansatz
Überprüfen Sie Ihre style.xml-Datei, in der sich Ihr NoActionBar-Design befindet. Stellen Sie sicher, dass das übergeordnete Element Theme.AppCompat.NoActionBar hat, und passen Sie es an, indem Sie Ihr Farbschema hinzufügen. Legen Sie schließlich Ihre Themen nach Bedarf im Manifest fest.
Unten finden Sie ein Beispiel meiner Datei styles.xml (ActionBar + NoActionBar).
quelle
Für mich hat es wie folgt funktioniert:
.NoActionBar
android.support.design.widget.AppBarLayout
android.support.design.widget.CoordinatorLayout
als übergeordnetes Layout.Im Wesentlichen ist es der dritte Schritt, in dem die Statusleiste
colorPrimaryDark
gezeichnet wird. Andernfalls wird sie nicht gezeichnet, wenn Sie einNoActionBar
Thema verwenden. Der zweite Schritt gibt Ihrer Symbolleiste diese Überlagerung .quelle
Für Stile v23
Für Stile v21
quelle
[
Erweitern Sie im Projektfenster das Verzeichnis res -> values -> styles.
Öffnen Sie styles.xml (v21)
BENUTZEN SIE EINEN VON UNTEN
android:windowDrawsSystemBarBackgrounds
.android:statusBarColor
Eigenschaft.android:statusBarColor
Eigenschaftslinie.quelle
Wenn Ihre v21 / styles.xml enthält
Dann entfernen oder Kommentar unterhalb der Linie oder die Farbe wechselt von Statusleiste,
Es funktioniert gut. Hoffe das ist hilfreich. Vielen Dank.
quelle
Ich habe eine Lösung dafür gefunden -
Fügen Sie dies Ihrem Stil hinzu und es funktioniert für API 21 oder höher.
quelle
Ich bin mir 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 Stammlayoutelement.
quelle
Das hat Arbeit für mich
quelle
Ich vermute, dass dies von Ihnen verursacht wird
android:windowBackground
. Ist@color/background_material_light
ein Verweis auf Weiß?quelle
<item name="android:statusBarColor">@android:color/transparent</item>
durch<item name="android:statusBarColor">@null</item>
.Überprüfen Sie, ob diese Symbolleiste weiß wird - AppBar wird nach dem Scrollen vom Bildschirm nicht gezeichnet
https://code.google.com/p/android/issues/detail?id=178037#c19
Ich benutze Bibliotheken 23.0.0. und der Fehler tritt immer noch auf.
Um dieses Problem zu umgehen, fügen Sie eine Ansicht hinzu, die fast keinen Platz beansprucht und unsichtbar sein kann. Siehe die Struktur unten.
Diese Fragen auf Stackoverflow.com beziehen sich auch auf diesen Fehler: CoordinatorLayout- Symbolleiste bei Eingabe bis zur vollen Höhe unsichtbar AppBarLayout - Layout manchmal unsichtbar, sobald es in die Ansicht aufgenommen wird (auch wenn es nicht eingegeben wurde)
quelle
Wenn Sie RelativeLayout / CoordinatorLayout verwenden, ist dies die Lösung, die für mich funktioniert hat:
Du musst benutzen
Denken Sie daran, CoordinatorLayout anstelle von RelativeLayout zu verwenden (die Leistung ist besser und funktioniert perfekt mit AppBarLayout).
So sollte Ihr Fragment beginnen
Gute Codierung!
quelle
Fügen Sie das Element 'windowTranslucentStatus' in Stilen hinzu
quelle
Fügen Sie dies in Ihre style.xml ein
Hinweis: Die Färbung der Statusleiste wird unterhalb der API-Ebene 21 nicht unterstützt.
quelle
Fügen Sie diese 2 Zeilen in der Java-Datei unten hinzu
quelle