Przeszukałem dokumentację, ale znalazłem tylko to: Link . Co jest używane, aby uczynić pasek półprzezroczystym ? To, co próbuję zrobić, to uczynić pasek stanu całkowicie przezroczystym (jak pokazano na poniższym obrazku) i uczynić go kompatybilnym wstecz dla APK <19:
Moje style.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>
Co mogłem zrobić:
android:fitsSystemWindows="true"
do mojego pliku activity_main.xml. Słupki systemowe są półprzezroczyste i nieprzezroczyste.<item name="android:statusBarColor">@android:color/transparent</item>
do swojego motywu :)android:windowTranslucentStatus
false i sprawił, że pasek stanu był przezroczysty. Teraz zrobiłem to samo z paskiem navigaton i dodałem,<item name="android:navigationBarColor">@android:color/transparent</item>
ale oba paski są szare. UGH!w.setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS, WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN);
Zamiast tego użyj funkcji „adjustPan”Po prostu dodaj tę linię kodu do głównego pliku java:
źródło
Możesz skorzystać z zewnętrznej biblioteki StatusBarUtil :
Dodaj do swojego poziomu modułu
build.gradle
:Następnie możesz użyć następującego narzędzia do działania, aby pasek stanu był przezroczysty:
Przykład:
źródło
Działa na Android KitKat i nowszych wersjach (dla tych, którzy chcą przezroczystość paska stanu i nie manipulują paskiem nawigacji, ponieważ wszystkie te odpowiedzi będą również przezroczyste pasek nawigacji!)
Najłatwiej to osiągnąć:
Umieść te 3 wiersze kodu w
styles.xml (v19)
->, jeśli nie wiesz, jak to zrobić (v19), po prostu napisz je w domyślnym,styles.xml
a następnie użyj alt+, enteraby automatycznie utworzyć:A teraz przejdź do swojej
MainActivity
klasy i wyłącz tę metodę naCreate w klasie:Następnie umieść ten kod w
onCreate
metodzie Działania:Otóż to!
źródło
Całkowicie przejrzysty pasek stanu i pasek nawigacji
źródło
Aby narysować układ pod paskiem stanu:
values / styles.xml
wartości-v21 / styles.xml
Użyj CoordinatorLayout / DrawerLayout, które już zajmują się parametrem fitSystemWindows lub stwórz własny układ, aby wyglądał tak:
main_activity.xml
Wynik:
Zrzut ekranu:
źródło
Możesz użyć poniższego kodu, aby uczynić pasek stanu przezroczystym. Zobacz obrazy Z czerwonym podświetleniem, które pomaga zidentyfikować użycie poniższego kodu
Fragment kodu Kotlin dla Twojej aplikacji na Androida
Krok: 1 Zapisz kod w metodzie tworzenia
Krok 2: Potrzebujesz metody SetWindowFlag opisanej w poniższym kodzie.
Fragment kodu Java dla Twojej aplikacji na Androida:
Krok 1: Główny kod aktywności
Krok 2: Metoda SetWindowFlag
źródło
Użyj
android:fitsSystemWindows="false"
w swoim górnym układzieźródło
Oto rozszerzenie w kotlin, które załatwia sprawę:
źródło
Używając tego kodu w swoim XML, będziesz mógł zobaczyć pasek czasu w swojej aktywności:
źródło
ISTNIEJĄ TRZY KROKI:
1) Po prostu użyj tego segmentu kodu w swojej metodzie @OnCreate
jeśli pracujesz nad Fragmentem, powinieneś umieścić ten segment kodu w metodzie @OnCreate Twojej aktywności.
2) Upewnij się, że ustawiłeś również przezroczystość w /res/values-v21/styles.xml:
Lub możesz ustawić przezroczystość programowo:
3) W każdym razie należy dodać segment kodu w styles.xml
UWAGA: Ta metoda działa tylko w API 21 i nowszych.
źródło
Możesz również obejrzeć mój przykład z animowanym awatarem i animowanym tekstem
CollapsingAvatarToolbarSample
Przeczytaj mój post na Medium
Więc pozwól mi wyjaśnić, jak to działa. Stworzyłem niestandardowy widok zaimplementowany AppBarLayout.OnOffsetChangedListener . Wewnątrz HeadCollapsing Custom View założyłem widok tekstu i obrazu w AppBarLayout.
źródło
Możesz tego spróbować.
źródło
Podczas gdy wszystkie powyższe odpowiedzi krążą wokół tego samego podstawowego pomysłu i możesz go zmusić do pracy z prostymi układami, korzystając z jednego z powyższych przykładów. Chciałem jednak zmienić kolor tła podczas korzystania z przesuwanej nawigacji po fragmentach „pełnego ekranu” (poza paskiem zakładek) i zachować regularną nawigację, paski kart i akcji.
Po uważnym przeczytaniu artykułu Antona Hadutskiego lepiej zrozumiałem, co się dzieje.
Mam
DrawerLayout
zConstraintLayout
(czyli kontener) który maToolbar
, dołączam do głównego fragmentu iBottomNavigationView
.Ustawianie
DrawerLayout
mającfitsSystemWindows
na true nie wystarcza, trzeba ustawić zarównoDrawerLayout
iConstraintLayout
. Zakładając przezroczysty pasek stanu, kolor paska stanu jest teraz taki sam jak kolor tła programuConstraintLayout
.Jednak dołączony fragment nadal ma wstawkę paska stanu, więc animacja kolejnego fragmentu „pełnego ekranu” na górze nie zmienia koloru paska stanu.
Trochę kodu z określoną w artykule
Activity
„sonCreate
:I wszystko jest w porządku, z wyjątkiem tego, że teraz
Toolbar
nie dotyczy wysokości paska stanu. Trochę więcej odwołując się do artykułu i mamy w pełni działające rozwiązanie:Plik main_activity.xml (pamiętaj, że marginTop
Toolbar
służy do podglądu, zostanie zastąpiony kodem):źródło
Uważam, że majstrowanie przy plikach styles.xml i aktywności jest zbyt kłopotliwe, dlatego stworzyłem powszechną metodę narzędziową, która ma ustawione poniżej opcje
Jawa
Kotlin DSL
I to wszystko, czego potrzeba, aby uzyskać przejrzysty pasek stanu. Mam nadzieję że to pomoże.
źródło
android:fitsSystemWindows="true"
działa tylko na v21. Możemy to ustawić w motywie XML lub w układzie nadrzędnym, takim jakLinearLayout
lub wCoordinateLayout
. Poniżej wersji 21 nie mogliśmy dodać tej flagi. Utwórz inny folder wartości z innymstyle.xml
plikiem zgodnie z potrzebami.źródło
To zadziałało dla mnie:
źródło
Wystarczy wejść
MainActivity.java
źródło
w moim przypadku ponieważ mam dolny pasek narzędzi miałem problem podczas testowania poprzednich rozwiązań, przyciski systemu Android są zakryte moim dolnym menu moim rozwiązaniem jest dodanie w ramach działania:
źródło
Możesz użyć tego poniższego kodu.
Uwzględnij ten układ w swoim głównym układzie.
toolbar.xml
Uwaga: możesz zastąpić SDP i SSP odpowiednio dp i sp.
źródło
w moim przypadku w ogóle nie wywołuję "onCreate" (jest to natywna aplikacja reaktywna i można to naprawić również za pomocą komponentu reagującego-natywnego StatusBar) można również użyć tego:
źródło
To powinno działać
// Na przykład w onCreate () działania
źródło
Znalazłem odpowiedź, badając tę bibliotekę: https://github.com/laobie/StatusBarUtil
więc musisz dodać następujące kody do swojej aktywności
źródło
dodaj te wiersze do swojego działania przed setContentView ()
dodaj te 2 linie do swojego AppTheme
i ostatnia rzecz, jaką musi wykonać Twoja minSdkVersion b 19
źródło
Nie
windowLightStatusBar
używaj zamiast tegostatusBarColor = @android:color/transparent
źródło
To jest tylko dla poziomu API> = 21. To działa dla mnie. Oto mój kod (Kotlin)
źródło