Ustawiłem kolor paska statusu na przezroczysty dla Lollipopa tylko z następującym wierszem w moim motywie:
<item name="android:statusBarColor">@android:color/transparent</item>
Teraz muszę się za tym rysować, ale nie mogę uzyskać za tym żadnego widoku. Wiem, jak to zrobić z tą windowTranslucentStatus
właściwością, ale nie chcę jej używać, ponieważ wtedy zignoruje ona kolor paska statusu ustawiony na przezroczysty.
android
android-ui
android-5.0-lollipop
alxscms
źródło
źródło
android:fitsSystemWindows="true"
Odpowiedzi:
Metoda nr 1:
Aby uzyskać całkowicie przezroczysty pasek stanu, musisz użyć
statusBarColor
, który jest dostępny tylko w API 21 i nowszych.windowTranslucentStatus
jest dostępny w API 19 i nowszych, ale dodaje przyciemnione tło do paska stanu. Jednak ustawieniewindowTranslucentStatus
daje jedną rzecz,statusBarColor
której nie daje zmiana na przezroczystą: ustawia flagiSYSTEM_UI_FLAG_LAYOUT_STABLE
iSYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
. Najłatwiejszym sposobem na uzyskanie tego samego efektu jest ręczne ustawienie tych flag, co skutecznie wyłącza wstawki narzucone przez system układu Androida i pozostawia samemu sobie.W swojej
onCreate
metodzie nazywasz tę linię :Pamiętaj, aby ustawić przezroczystość w /res/values-v21/styles.xml:
Lub ustaw przezroczystość programowo:
Dobrą stroną tego podejścia jest to, że te same układy i projekty mogą być również używane w API 19, zamieniając przezroczysty pasek stanu na przyciemniany półprzezroczysty pasek stanu.
Metoda nr 2:
Jeśli potrzebujesz tylko pomalować obraz tła pod paskiem stanu, zamiast umieszczać widok za nim, możesz to zrobić, ustawiając tło motywu działania na żądany obraz i ustawiając przezroczystość paska stanu, jak pokazano w metodzie # 1. To była metoda, której użyłem do stworzenia zrzutów ekranu do artykułu Android Police z kilku miesięcy temu.
Metoda nr 3:
Jeśli musisz zignorować standardowe wstawki systemowe dla niektórych układów, zachowując je w innych, jedynym realnym sposobem na to jest praca z często połączoną
ScrimInsetsFrameLayout
klasą. Oczywiście niektóre rzeczy wykonane na tych zajęciach nie są konieczne we wszystkich scenariuszach. Na przykład, jeśli nie planujesz używać syntetycznej nakładki paska stanu, po prostuinit()
zakomentuj wszystko w metodzie i nie przejmuj się dodawaniem niczego do pliku attrs.xml. Widziałem, jak to podejście działa, ale myślę, że przekonasz się, że ma ono inne implikacje, których obejście może wymagać dużo pracy.Zauważyłem też, że sprzeciwiasz się owijaniu wielu układów. W przypadku zawijania jednego układu wewnątrz drugiego, gdzie oba mają
match_parent
wysokość i szerokość, wpływ na wydajność jest zbyt trywialny, aby się nim martwić. Niezależnie od tego możesz całkowicie uniknąć tej sytuacji, zmieniając klasę, z której się ona rozciąga,FrameLayout
na dowolną inną klasę układu, którą lubisz. Będzie działać dobrze.źródło
SYSTEM_UI_FLAG_LAYOUT_STABLE
iSYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
było rozwiązaniem, którego szukałem.CollapsingToolbarLayout
iToolbar
: pasek stanu nie jest w pełni przezroczysty iandroid:statusBarColor
nie działaTo zadziałało w moim przypadku
Więcej informacji na temat pracy z paskami stanu: youtube.com/watch?v=_mGDMVRO3iE
źródło
Wypróbuj ten motyw
Upewnij się, że twój zestaw układów
źródło
android:fitsSystemWindows="false"
to przecięcie paska narzędzi na pół.Zamiast
Użyj następujących:
I pamiętaj, aby usunąć górne wypełnienie (które jest dodawane domyślnie) w układzie „MainActivity”.
Zwróć uwagę, że nie czyni to paska stanu w pełni przezroczystym, a na pasku stanu nadal będzie widoczna „wyblakła czarna” nakładka.
źródło
<item name="android:windowTranslucentStatus">true</item>
sprawia, że Android umieszcza wyblakłe czarne tło pod paskiem stanu, czego nie szukam. Czy jest jakiś sposób, aby nie mieć tego czarnego wyblakłego tła?Rozwiązanie od Cody Toombs prawie załatwiło sprawę . Nie jestem pewien, czy jest to związane z platformą Xamarin, czy nie, ale mam teraz akceptowalne rozwiązanie:
To jest moja konfiguracja:
Mam projekt systemu Android, w którym odwołałem się do pakietów Android.Support v4 i v7. Mam zdefiniowane dwa style:
values / styles.xml:
values-v21 / styles.xml:
AndroidManifest jest kierowany na „MyStyle”:
AndroidManifest.xml:
I na koniec kod w głównym działaniu:
Zauważ, że ustawiłem flagę DrawsSystemBarBackgrounds, to robi różnicę
Spędziłem dużo czasu, aby to naprawić, w rzeczywistości zbyt wiele. Mam nadzieję, że ta odpowiedź pomoże każdemu, kto próbuje osiągnąć to samo.
źródło
android:windowTranslucentStatus
wymaga interfejsu API na poziomie 19 lub wyższym, jak to możliwe, że używasz go w plikach values / styles.xml , mając jednocześnieandroid:minSdkVersion
10?Odpowiedź @Cody Toombs prowadzi do problemu, który powoduje układ za paskiem nawigacyjnym. Więc to, co znalazłem, używa tego rozwiązania podane przez @Kriti
tutaj jest fragment kodu Kotlin dla tego samego:
Musisz także dodać
widok główny układu.
źródło
Miałem ten sam problem, więc tworzę ImageView, który rysuje za paskiem stanu API 19+
Ustaw niestandardowy obraz za paskiem stanu gist.github.com
źródło
Możesz użyć ScrimInsetFrameLayout
https://github.com/google/iosched/blob/master/android/src/main/java/com/google/samples/apps/iosched/ui/widget/ScrimInsetsFrameLayout.java
android: fitSystemWindows = "true" powinno być ustawione na układzie scrim!
źródło
RelativeLayout
zamiast aFrameLayout
?Podobnie jak w przypadku niektórych opublikowanych rozwiązań, ale w moim przypadku pasek stanu był przezroczysty i naprawiałem pozycję paska akcji z pewnym ujemnym marginesem
I użyłem na pasku narzędzi i widoku głównym
źródło
Istnieje dobra biblioteka StatusBarUtil z @laobie która pomaga w łatwym rysowaniu obrazu w StatusBar.
Po prostu dodaj swoje
build.gradle
:Następnie w zestawie Activity
W układzie
Aby uzyskać więcej informacji, pobierz demo lub sklonuj ze strony github i baw się wszystkimi funkcjami.
Uwaga: Wsparcie KitKat i nowszych.
Mam nadzieję, że to pomoże komuś innemu!
źródło
W Android Studio 1.4 projekt szablonu z kodem płyty kotłowej ustawia
Overlay
motyw na AppbarLayout i / lub pasku narzędzi. Są również ustawione tak, aby były renderowane za paskiem stanu przezfitSystemWindow
atrybut = true. Spowoduje to, że tylko pasek narzędzi będzie renderowany bezpośrednio pod paskiem stanu, a wszystko inne będzie renderowane pod paskiem narzędzi. Dlatego powyższe rozwiązania nie będą działać samodzielnie. Będziesz musiał wprowadzić następujące zmiany.Umieść następujący kod w swoim pliku styles-21.xml .
@android: kolor / przezroczysty
Przypisz ten motyw do działania zawierającego szufladę nawigacji w pliku AndroidManifest.xml .
Spowoduje to, że szuflada nawigacji będzie renderowana za przezroczystym paskiem stanu.
źródło
Wszystko, co musisz zrobić, to ustawić te właściwości w swoim motywie
źródło
Zaakceptowana odpowiedź zadziałała dla mnie przy użyciu CollapsingToolbarLayout. Należy jednak pamiętać, że
setSytstemUiVisibility()
przesłania to wszelkie wcześniejsze wywołania tej funkcji. Więc jeśli używasz tej funkcji gdzie indziej dla tego samego widoku, musisz dołączyćView.SYSTEM_UI_FLAG_LAYOUT_STABLE
iView.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
flagi , w przeciwnym razie zostaną one nadpisane przez nowe wywołanie.Tak było w moim przypadku, a kiedy dodałem dwie flagi do innego miejsca, do którego dzwoniłem
setSystemUiVisibility()
, zaakceptowana odpowiedź działała idealnie.źródło
Dodam tutaj więcej informacji. Najnowsze osiągnięcia Androida ułatwiły obsługę wielu przypadków na pasku stanu. Poniżej znajdują się moje obserwacje z
styles.xml
<item name="android:windowTranslucentStatus">true</item>
pasek stanu będzie przezroczysty i będzie widoczny przed interfejsem użytkownika. Twoja aktywność zajmie całą przestrzeń na górze.Kolor tła : ponownie, w przypadku SDK 21+,
<item name="android:statusBarColor">@color/your_color</item>
po prostu nada kolor Twojemu paskowi stanu, nie wpływając na nic innego.Jednak w nowszych urządzeniach (Android M / +) ikony zaczęły pojawiać się w różnych odcieniach. System operacyjny może nadać ikonom SDK 23 / + ciemniejszy odcień szarości, jeśli zastąpisz
styles.xml
plik wvalues-23
folderze i dodasz<item name="android:windowLightStatusBar">true</item>
.W ten sposób zapewnisz użytkownikowi bardziej widoczny pasek stanu, jeśli pasek stanu ma jasny kolor (pomyśl, jak wiele aplikacji Google ma jasne tło, a ikony są tam widoczne w kolorze szarym).
Sugeruję, abyś skorzystał z tego, jeśli nadajesz kolor swojemu paskowi stanu za pośrednictwem punktu # 2
W najnowszych urządzeniach SDK 29 / + jest wyposażony w systemowy, jasny i ciemny motyw, kontrolowany przez użytkownika. Jako programiści mamy również zastąpić nasz plik stylu w nowym
values-night
folderze, aby dać użytkownikowi 2 różne doświadczenia.Tutaj ponownie stwierdziłem, że punkt # 2 jest skuteczny w zapewnianiu „koloru tła paska stanu”. Ale system nie zmieniał koloru ikon paska stanu dla mojej aplikacji. ponieważ moja dzienna wersja stylu składała się z jaśniejszego motywu, oznacza to, że użytkownicy będą cierpieć z powodu słabej widoczności (białe ikony na jaśniejszym tle)
Ten problem można rozwiązać, stosując podejście z punktu # 3 lub zastępując plik stylu w
values-29
folderze i używając nowszego api<item name="android:enforceStatusBarContrast">true</item>
. Spowoduje to automatyczne wymuszenie szarawego odcienia ikon, jeśli kolor tła jest zbyt jasny.źródło
Oto motyw, którego używam, aby to osiągnąć:
źródło
Właściwym rozwiązaniem jest zmiana właściwości w XML pod tagiem Activity na poniższy styl. Po prostu działa
źródło