Ich habe meine statusBar-Farbe für Lollipop nur mit der folgenden Zeile in meinem Thema auf transparent gesetzt:
<item name="android:statusBarColor">@android:color/transparent</item>
Jetzt muss ich dahinter zeichnen, aber ich kann keine Ansicht dahinter zeichnen. Ich weiß, wie es mit dem gehtwindowTranslucentStatus
Eigenschaft gemacht wird, möchte diese Eigenschaft jedoch nicht verwenden, da sie dann die Farbe der Statusleiste ignoriert, die auf transparent gesetzt ist.
android
android-ui
android-5.0-lollipop
alxscms
quelle
quelle
android:fitsSystemWindows="true"
Antworten:
Methode 1:
Um eine vollständig transparente Statusleiste zu erhalten, müssen Sie diese verwenden
statusBarColor
, die nur für API 21 und höher verfügbar ist.windowTranslucentStatus
ist für API 19 und höher verfügbar, fügt jedoch einen getönten Hintergrund für die Statusleiste hinzu. Mit der Einstellung wirdwindowTranslucentStatus
jedoch eines erreicht, was beim WechselstatusBarColor
zu transparent nicht der Fall ist: Sie setzt dasSYSTEM_UI_FLAG_LAYOUT_STABLE
undSYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
Flags . Der einfachste Weg, um den gleichen Effekt zu erzielen, besteht darin, diese Flags manuell zu setzen, wodurch die vom Android-Layoutsystem auferlegten Insets effektiv deaktiviert werden und Sie sich selbst überlassen bleiben.Sie nennen diese Zeile in Ihrer
onCreate
Methode:Stellen Sie sicher, dass Sie die Transparenz auch in /res/values-v21/styles.xml festlegen:
Oder stellen Sie die Transparenz programmgesteuert ein:
Die gute Seite dieses Ansatzes ist, dass dieselben Layouts und Designs auch für API 19 verwendet werden können, indem die transparente Statusleiste gegen die getönte durchscheinende Statusleiste ausgetauscht wird.
Methode 2:
Wenn Sie nur ein Hintergrundbild unter Ihre Statusleiste malen müssen, anstatt eine Ansicht dahinter zu positionieren, können Sie einfach den Hintergrund des Themas Ihrer Aktivität auf das gewünschte Bild einstellen und die Transparenz der Statusleiste wie in Methode # gezeigt einstellen. 1. Mit dieser Methode habe ich die Screenshots für den Artikel der Android Police erstellt einigen Monaten erstellt.
Methode 3:
Wenn Sie die Standardsystemeinfügungen für einige Layouts ignorieren müssen, während sie in anderen Layouts funktionieren, können Sie dies nur mit der häufig verknüpften
ScrimInsetsFrameLayout
Klasse tun . Natürlich sind einige der in dieser Klasse durchgeführten Dinge nicht für alle Szenarien erforderlich. Wenn Sie beispielsweise nicht vorhaben, die Überlagerung der synthetischen Statusleiste zu verwenden, kommentieren Sie einfach alles in derinit()
vorhaben, die Methode aus und fügen Sie der Datei attrs.xml nichts hinzu. Ich habe gesehen, dass dieser Ansatz funktioniert, aber ich denke, Sie werden feststellen, dass er einige andere Implikationen mit sich bringt, die möglicherweise viel Arbeit bedeuten, um herumzukommen.Ich habe auch gesehen, dass Sie es ablehnen, mehrere Layouts zu verpacken. Wenn Sie ein Layout in ein anderes einwickeln, bei dem sowohl die
match_parent
Höhe als auch die Breite berücksichtigt werden, sind die Auswirkungen auf die Leistung zu trivial, um sich Sorgen zu machen. Unabhängig davon können Sie diese Situation vollständig vermeiden, indem Sie die Klasse, von der sie ausgeht,FrameLayout
auf eine andere Art von Layoutklasse ändern, die Sie mögen. Es wird gut funktionieren.quelle
SYSTEM_UI_FLAG_LAYOUT_STABLE
undSYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
Flags war die Lösung, nach der ich gesucht habe.CollapsingToolbarLayout
undToolbar
: Statusleiste bleibt nicht vollständig durchscheinend undandroid:statusBarColor
hat keine WirkungDas hat bei meinem Fall funktioniert
Weitere Informationen zum Arbeiten mit statusBars finden Sie unter youtube.com/watch?v=_mGDMVRO3iE
quelle
Probieren Sie dieses Thema aus
Stellen Sie sicher, dass Ihr Layout festgelegt ist
quelle
android:fitsSystemWindows="false"
wird die Symbolleiste halbiert.Anstatt
Verwenden Sie Folgendes:
Stellen Sie außerdem sicher, dass Sie die obere Polsterung (die standardmäßig hinzugefügt wird) in Ihrem 'MainActivity'-Layout entfernen.
Beachten Sie, dass dadurch die Statusleiste nicht vollständig transparent wird und Ihre Statusleiste weiterhin mit einem "verblassten schwarzen" Overlay versehen ist.
quelle
<item name="android:windowTranslucentStatus">true</item>
bringt Android einen verblassten schwarzen Hintergrund unter die Statusleiste, was nicht das ist, wonach ich suche. Wie auch immer, um diesen schwarz verblassten Hintergrund nicht zu haben?Die Lösung von Cody Toombs hat fast den Trick für mich getan. Ich bin nicht sicher, ob dies mit Xamarin zusammenhängt oder nicht, aber ich habe jetzt eine akzeptable Lösung:
Dies ist mein Setup:
Ich habe ein Android-Projekt, in dem ich auf die Pakete Android.Support v4 und v7 verwiesen habe. Ich habe zwei Stile definiert:
values / styles.xml:
values-v21 / styles.xml:
AndroidManifest zielt auf "MyStyle" ab:
AndroidManifest.xml:
Und schließlich der Code in der Hauptaktivität:
Beachten Sie, dass ich das DrawsSystemBarBackgrounds-Flag gesetzt habe. Dies macht den Unterschied
Ich habe viel Zeit damit verbracht, es richtig zu machen, tatsächlich zu viel Zeit. Hoffentlich hilft diese Antwort jedem, der versucht, dasselbe zu erreichen.
quelle
android:windowTranslucentStatus
erfordert API-Level 19 oder höher. Wie ist es möglich, dass Sie es für Ihre Werte / styles.xml verwenden, während Sie eineandroid:minSdkVersion
10 haben?Die Antwort von @Cody Toombs führte zu einem Problem, bei dem das Layout hinter der Navigationsleiste angezeigt wird. Ich habe also festgestellt, dass ich diese von @Kriti bereitgestellte Lösung verwende
Hier ist das Kotlin-Code-Snippet für dasselbe:
Sie müssen auch hinzufügen
Stammansicht Ihres Layouts.
quelle
Ich hatte das gleiche Problem, also erstelle ich ImageView, das hinter der Statusleiste API 19+ steht
Legen Sie ein benutzerdefiniertes Bild hinter der Statusleiste gist.github.com fest
quelle
Sie können ScrimInsetFrameLayout verwenden
https://github.com/google/iosched/blob/master/android/src/main/java/com/google/samples/apps/iosched/ui/widget/ScrimInsetsFrameLayout.java
android: fitSystemWindows = "true" sollte auf Scrim-Layout gesetzt werden!
quelle
RelativeLayout
anstelle von a verwenden möchteFrameLayout
?Ähnlich wie bei einigen der veröffentlichten Lösungen, aber in meinem Fall habe ich die Statusleiste transparent gemacht und die Position der Aktionsleiste mit einem negativen Rand festgelegt
Und ich habe in der Symbolleiste und in der Stammansicht verwendet
quelle
Es gibt eine gute Bibliothek StatusBarUtil von @laobie , die das einfache Zeichnen von Bildern in der StatusBar erleichtert.
Fügen Sie einfach Folgendes hinzu
build.gradle
:Dann im Aktivitätsset
Im Layout
Für weitere Informationen laden Sie die Demo herunter oder klonen Sie sie von der Github-Seite und spielen Sie mit allen Funktionen.
Hinweis: Unterstützt KitKat und höher.
Hoffe das hilft jemand anderem!
quelle
Mit Android Studio 1.4 legt das Vorlagenprojekt mit
Overlay
Kesselplattencode das Thema in Ihrem AppbarLayout und / oder Ihrer Symbolleiste fest. Sie werden auch so eingestellt, dass sie hinter der Statusleiste mitfitSystemWindow
attribute = true gerendert werden . Dadurch wird nur die Symbolleiste direkt unter der Statusleiste und alles andere unter der Symbolleiste gerendert. Die oben genannten Lösungen funktionieren also nicht von alleine. Sie müssen die folgenden Änderungen vornehmen.Fügen Sie den folgenden Code in Ihre Datei styles-21.xml ein .
@android: Farbe / transparent
Weisen Sie dieses Thema der Aktivität zu, die die Navigationsleiste in der Datei AndroidManifest.xml enthält.
Dadurch wird die Navigationsleiste hinter der transparenten Statusleiste gerendert.
quelle
Sie müssen diese Eigenschaften lediglich in Ihrem Thema festlegen
quelle
Die akzeptierte Antwort funktionierte für mich mit einem CollapsingToolbarLayout. Es ist jedoch wichtig zu beachten, dass
setSytstemUiVisibility()
alle vorherigen Aufrufe dieser Funktion überschrieben werden. Wenn Sie diese Funktion also an einer anderen Stelle für dieselbe Ansicht verwenden, müssen Sie dasView.SYSTEM_UI_FLAG_LAYOUT_STABLE
und einschließenView.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
Flags , da sie sonst beim neuen Aufruf überschrieben werden.Dies war bei mir der Fall, und als ich die beiden Flaggen an der anderen Stelle anbrachte, an der ich
setSystemUiVisibility()
anrief, funktionierte die akzeptierte Antwort perfekt.quelle
Ich werde hier weitere Informationen hinzufügen. Die neuesten Android-Entwicklungen haben es ziemlich einfach gemacht, viele Fälle in der Statusleiste zu bearbeiten. Es folgen meine Beobachtungen aus dem
styles.xml
<item name="android:windowTranslucentStatus">true</item>
die Statusleiste transparent und vor der Benutzeroberfläche angezeigt . Ihre Aktivität nimmt den gesamten Raum der Spitze ein.Hintergrundfarbe : Auch für SDK 21+
<item name="android:statusBarColor">@color/your_color</item>
wird Ihrer Statusleiste einfach eine Farbe zugewiesen , ohne dass sich dies auf etwas anderes auswirkt.Bei späteren Geräten (Android M / +) wurden die Symbole jedoch in verschiedenen Farben angezeigt. Das Betriebssystem kann den Symbolen für SDK 23 / + einen dunkleren Grauton verleihen, wenn Sie Ihre
styles.xml
Datei imvalues-23
Ordner überschreiben und hinzufügen<item name="android:windowLightStatusBar">true</item>
.Auf diese Weise erhalten Sie für Ihren Benutzer eine besser sichtbare Statusleiste, wenn Ihre Statusleiste eine helle Farbe aufweist (denken Sie daran, wie viele Google Apps einen hellen Hintergrund haben, die Symbole dort jedoch in einer grauen Farbe sichtbar sind).
Ich würde Ihnen empfehlen, dies zu verwenden, wenn Sie Ihrer Statusleiste über Punkt 2 Farbe verleihen
In den neuesten Geräten verfügt das SDK 29 / + über ein systemweites helles und dunkles Thema, das vom Benutzer gesteuert werden kann. Als Entwickler sollen wir auch unsere Style-Datei in einem neuen
values-night
Ordner überschreiben , um dem Benutzer 2 verschiedene Erfahrungen zu bieten.Auch hier habe ich festgestellt, dass Punkt 2 bei der Bereitstellung der "Hintergrundfarbe für die Statusleiste" wirksam ist. Das System hat jedoch die Farbe der Statusleistensymbole für meine App nicht geändert. Da meine Tagesversion des Stils aus einem helleren Thema bestand, bedeutet dies, dass Benutzer unter geringer Sichtbarkeit leiden (weiße Symbole auf hellerem Hintergrund).
Dieses Problem kann durch Verwendung des Punkt-3-Ansatzes oder durch Überschreiben der Stildatei im
values-29
Ordner und Verwenden einer neueren Version gelöst werden api<item name="android:enforceStatusBarContrast">true</item>
. Dadurch wird die Grautönung von Symbolen automatisch verstärkt, wenn Ihre Hintergrundfarbe zu hell ist.quelle
Hier ist das Thema, mit dem ich dies erreiche:
quelle
Die richtige Lösung besteht darin, eine Eigenschaft in XML unter Ihrem Activity-Tag in den folgenden Stil zu ändern. Es funktioniert einfach
quelle