Ich habe die Dokumentation durchsucht , aber nur Folgendes gefunden: Link . Womit wird der Balken durchscheinend ? Ich versuche, die Statusleiste vollständig transparent zu machen (siehe Abbildung unten) und sie abwärtskompatibel für APK <19 zu machen:
Meine styles.xml:
<resources xmlns:tools="http://schemas.android.com/tools">
<style name="AppTheme" parent="Theme.AppCompat.Light">
<item name="android:actionBarStyle">@style/ThemeActionBar</item>
<item name="android:windowActionBarOverlay">true</item>
<!-- Support library compatibility -->
<item name="actionBarStyle">@style/ThemeActionBar</item>
<item name="windowActionBarOverlay">true</item>
</style>
<style name="ThemeActionBar" parent="Widget.AppCompat.Light.ActionBar.Solid">
<item name="android:background"> @null </item>
<!-- Support library compatibility -->
<item name="background">@null</item>
<item name="android:displayOptions"> showHome | useLogo</item>
<item name="displayOptions">showHome|useLogo</item>
</style>
</resources>
Was ich konnte:
android:fitsSystemWindows="true"
zu meiner activity_main.xml hinzugefügt . Die Systemleisten sind durchscheinend und nicht transparent.<item name="android:statusBarColor">@android:color/transparent</item>
, Ihr Thema zu ergänzen :)android:windowTranslucentStatus
auf false gesetzt und die Statusleiste transparent gemacht. Jetzt habe ich dasselbe mit der Navigationsleiste gemacht und hinzugefügt,<item name="android:navigationBarColor">@android:color/transparent</item>
aber beide Balken werden grau. PFUI!w.setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS, WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN);
stattdessenFügen Sie einfach diese Codezeile zu Ihrer Java-Hauptdatei hinzu:
quelle
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"> <!-- Customize your theme here. --> <item name="colorPrimary">@color/colorPrimary</item> <item name="colorPrimaryDark">@color/colorPrimaryDark</item> <item name="colorAccent">@color/colorAccent</item> </style>
Sie können die externe Bibliothek StatusBarUtil verwenden :
Fügen Sie Ihrer Modulebene hinzu
build.gradle
:Anschließend können Sie das folgende Dienstprogramm für eine Aktivität verwenden, um die Statusleiste transparent zu machen:
Beispiel:
quelle
Funktioniert für Android KitKat und höher (Für diejenigen, die die Statusleiste transparent machen und die Navigationsleiste nicht manipulieren möchten, da alle diese Antworten auch die Navigationsleiste transparent machen!)
Der einfachste Weg, dies zu erreichen:
styles.xml (v19)
Fügen Sie diese 3 Codezeilen in das Feld -> ein. Wenn Sie nicht wissen, wie Sie dies haben sollen (v19), schreiben Sie sie einfach in Ihre Standardeinstellungstyles.xml
und erstellen Sie sie dann automatisch mit alt+ enter:Gehen Sie jetzt zu Ihrer
MainActivity
Klasse und setzen Sie diese Methode aus onCreate in die Klasse:Fügen Sie dann diesen Code in die
onCreate
Methode der Aktivität ein:Das ist es!
quelle
Vollständig transparente Statusleiste und Navigationsleiste
quelle
So zeichnen Sie Ihr Layout in der Statusleiste:
values / styles.xml
values-v21 / styles.xml
Verwenden Sie CoordinatorLayout / DrawerLayout, die sich bereits um den Parameter fitSystemWindows kümmern, oder erstellen Sie ein eigenes Layout, das wie folgt aussieht:
main_activity.xml
Ergebnis:
Bildschirmfoto:
quelle
Sie können den folgenden Code verwenden, um die Statusleiste transparent zu machen. Siehe Bilder mit roter Markierung, mit deren Hilfe Sie die Verwendung des folgenden Codes identifizieren können
Kotlin-Code-Snippet für Ihre Android-App
Schritt: 1 Notieren Sie sich den Code in On create method
Schritt 2: Sie benötigen die SetWindowFlag-Methode, die im folgenden Code beschrieben wird.
Java-Code-Snippet für Ihre Android-App:
Schritt 1: Main Activity - Code
Schritt 2: SetWindowFlag-Methode
quelle
Verwenden Sie
android:fitsSystemWindows="false"
in Ihrem Top-Layoutquelle
Hier ist eine Erweiterung in Kotlin, die den Trick macht:
quelle
Wenn Sie diesen Code in Ihrem XML verwenden, können Sie die Zeitleiste in Ihrer Aktivität sehen:
quelle
ES GIBT DREI SCHRITTE:
1) Verwenden Sie dieses Codesegment einfach in Ihrer @ OnCreate-Methode
Wenn Sie an Fragment arbeiten, sollten Sie dieses Codesegment in die @ OnCreate-Methode Ihrer Aktivität einfügen.
2) Stellen Sie sicher, dass Sie die Transparenz auch in /res/values-v21/styles.xml festlegen:
Oder Sie können die Transparenz programmgesteuert einstellen:
3) In jedem Fall sollten Sie das Codesegment in styles.xml hinzufügen
HINWEIS: Diese Methode funktioniert nur mit API 21 und höher.
quelle
Sie können mein Beispiel auch mit animiertem Avatar und animiertem Text anzeigen
CollapsingAvatarToolbarSample
Lesen Sie meinen Beitrag auf Medium
Lassen Sie mich erklären, wie es funktioniert. Ich habe eine benutzerdefinierte Ansicht erstellt, die AppBarLayout.OnOffsetChangedListener implementiert . In der benutzerdefinierten HeadCollapsing-Ansicht habe ich die Text- und Bildansicht in AppBarLayout gegründet.
quelle
Sie können das versuchen.
quelle
Alle oben genannten Antworten basieren auf derselben Grundidee, und Sie können sie anhand eines der obigen Beispiele mit einfachen Layouts zum Laufen bringen. Ich wollte jedoch die Farbe des Hintergrunds ändern, während ich die Fragmentnavigation im Vollbildmodus (neben der Registerkartenleiste) verschob, und die regulären Navigations-, Registerkarten- und Aktionsleisten beibehalten.
Nachdem ich einen Artikel von Anton Hadutski sorgfältig gelesen hatte, hatte ich ein besseres Verständnis dafür, was los ist.
Ich habe
DrawerLayout
mitConstraintLayout
(dh Container)Toolbar
, der für das Hauptfragment und enthältBottomNavigationView
.Einstellung
DrawerLayout
mitfitsSystemWindows
auf true nicht ausreichend ist, müssen Sie beide setzenDrawerLayout
undConstraintLayout
. Unter der Annahme einer transparenten Statusleiste entspricht die Farbe der Statusleiste jetzt der Hintergrundfarbe vonConstraintLayout
.Das enthaltene Fragment enthält jedoch weiterhin die Statusleiste, sodass durch das Animieren eines weiteren "Vollbild" -Fragments über mit die Farbe der Statusleiste nicht geändert wird.
Ein bisschen Code aus dem Artikel in
Activity
'sonCreate
:Und alles ist gut, außer dass jetzt die
Toolbar
Höhe der Statusleiste nicht angesprochen wird. Einige weitere beziehen sich auf den Artikel und wir haben eine voll funktionsfähige Lösung:Die Datei main_activity.xml (bitte beachten Sie, dass marginTop in
Toolbar
zu Vorschauzwecken dient und durch den Code ersetzt wird):quelle
Ich fand es zu umständlich, mit styles.xml und Aktivitäten herumzuspielen, und erstellte daher eine allgemeine Dienstprogrammmethode, für die die folgenden Optionen festgelegt sind
Java
Kotlin DSL
Und das war alles, um eine transparente Statusleiste zu erreichen. Hoffe das hilft.
quelle
android:fitsSystemWindows="true"
funktioniert nur auf v21. Wir können es in Theme XML oder im übergeordneten Layout wieLinearLayout
oder in einstellenCoordinateLayout
. Für unter v21 konnten wir dieses Flag nicht hinzufügen. Bitte erstellen Siestyle.xml
je nach Bedarf einen Ordner mit unterschiedlichen Werten und einer anderen Datei.quelle
Das hat bei mir funktioniert:
quelle
Alles was man braucht ist hineinzugehen
MainActivity.java
quelle
In meinem Fall, da ich eine untere Symbolleiste habe, hatte ich beim Testen der vorherigen Lösungen ein Problem. Die Schaltflächen des Android-Systems werden mit meinem unteren Menü abgedeckt. Meine Lösung besteht darin, innerhalb der Aktivität Folgendes hinzuzufügen:
quelle
Sie können diesen Code unten verwenden.
Fügen Sie dieses Layout in Ihr Hauptlayout ein.
toolbar.xml
Hinweis: Sie können SDP und SSP durch dp bzw. sp ersetzen.
quelle
In meinem Fall rufe ich überhaupt nicht "onCreate" auf (es ist eine reaktionsfähige native App und dies kann auch mithilfe der reaktionsnativen StatusBar-Komponente behoben werden). Man kann auch Folgendes verwenden:
quelle
Das sollte funktionieren
// Zum Beispiel in onCreate () von Activity
quelle
Ich habe die Antwort gefunden, als ich diese Bibliothek untersucht habe: https://github.com/laobie/StatusBarUtil
Daher müssen Sie Ihrer Aktivität die folgenden Codes hinzufügen
quelle
Fügen Sie diese Zeilen vor dem setContentView () zu Ihrer Aktivität hinzu.
Fügen Sie diese 2 Zeilen in Ihr AppTheme ein
und als letztes muss deine minSdkVersion b 19 sein
quelle
Verwendung Dont
windowLightStatusBar
Verwendung anstellestatusBarColor = @android:color/transparent
quelle
Dies ist nur für API Level> = 21. Es funktioniert für mich. Hier ist mein Code (Kotlin)
quelle