Jaka jest wysokość paska stanu w Androidzie? Czy zawsze jest tak samo?
Z moich pomiarów wynika, że jest to 25dp, ale nie jestem pewien, czy ma taką samą wysokość na wszystkich platformach.
(Chcę to wiedzieć, aby poprawnie zaimplementować przejście zanikania z działania, które nie ma paska stanu na takie, które ma)
Odpowiedzi:
na to pytanie odpowiedziano wcześniej ... Wysokość paska stanu?
Aktualizacja ::
Obecna metoda:
ok, wysokość paska stanu zależy od rozmiaru ekranu, na przykład w urządzeniu o rozmiarze ekranu 240 x 320 wysokość paska stanu wynosi 20px, w przypadku urządzenia o rozmiarze ekranu 320 x 480 wysokość paska stanu wynosi 25px, dla urządzenie o rozdzielczości 480 x 800 wysokość paska stanu musi wynosić 38 pikseli
więc polecam użyć tego skryptu, aby uzyskać wysokość paska stanu
(stara metoda), aby uzyskać wysokość paska stanu w
onCreate()
metodzie działania, użyj tej metody:źródło
window.getDecorView().getWindowVisibleDisplayFrame(rectangle)
nie jest poprawnym sposobem uzyskania wysokości paska stanu, jeśli jesteś w trybie wielu okien + obrót pionowy + drugie okno. Otrzymasz ogromną wartość (w tym 1. wysokość).Ze wszystkich próbek kodu, których użyłem, aby uzyskać wysokość paska stanu, jedyny, który wydaje się działać w
onCreate
metodzie anActivity
to:Najwyraźniej rzeczywista wysokość paska stanu jest przechowywana jako zasób Androida. Powyższy kod można dodać do
ContextWrapper
klasy (np. AnActivity
).Znaleziono pod adresem http://mrtn.me/blog/2012/03/17/get-the-height-of-the-status-bar-in-android/
źródło
Na urządzeniach MDPI pasek stanu ma 25px. Możemy użyć tego jako podstawy i pomnożyć go przez gęstość (zaokrągloną w górę), aby uzyskać wysokość paska stanu na dowolnym urządzeniu:
Dla porównania: ldpi = .75, mdpi = 1, hdpi = 1,5, xhdpi = 2
źródło
Zakodowanie wielkości lub użycie odbicia w celu uzyskania wartości
status_bar_height
jest uważane za złą praktykę. Chris Banes mówił o tym w Droidcon w Nowym Jorku . Zalecanym sposobem uzyskania rozmiaru paska stanu jest użycie OnApplyWindowInsetsListener :Zostało to dodane w API 20 i jest również backportowane przez ViewAppCompat .
źródło
Połączyłem niektóre rozwiązania razem:
inna alternatywa:
EDYCJA: Alternatywa dla runJustBeforeBeingDrawn: https://stackoverflow.com/a/28136027/878126
źródło
Zgodnie z wytycznymi projektowymi Google ; wysokość paska stanu wynosi 24 dp.
Jeśli chcesz uzyskać wysokość paska stanu w pikselach, możesz użyć poniższej metody:
które można wywołać z działania z:
źródło
Domyślna wysokość wynosiła 25dp. W Androidzie Marshmallow (API 23) wysokość została zmniejszona do 24dp.
Aktualizacja: należy pamiętać, że od czasów, w których zaczęły się ery wycięć i aparatów wykrawających, używanie statycznej wysokości paska stanu już nie działa. Zamiast tego użyj wstawek okiennych!
źródło
działa to również z linkiem referencyjnym
źródło
Mam ten sam problem z koniecznością uzyskania wysokości paska stanu w obiekcie onCreate. To działa dla mnie.
Wewnątrz onCreate:
Widzieć:
http://developer.android.com/reference/android/util/DisplayMetrics.html http://developer.android.com/guide/practices/ui_guidelines/icon_design.html
źródło
Oficjalna wysokość jest
24dp
, zgodnie z oficjalnym stwierdzeniem Google na stronie Android Design .źródło
Tak, kiedy próbuję z View, daje wynik 25px. Oto cały kod:
źródło
źródło
Spróbuj tego:
nie działało to dla mnie w metodzie onCreate dla działania, ale działało, gdy umieściłem go w onClickListener i dał mi pomiar 25
źródło
wysokość paska stanu wynosi 24dp w Androidzie 6.0
odpowiedź znajdziesz w kodzie źródłowym: frameworks \ base \ core \ res \ res \ values \ dimens.xml
źródło
@android:dimen/status_bar_height
nie działa dla mnieAby rozwiązać ten problem, zastosowałem podejście kombinowane. Jest to konieczne, ponieważ na tabletach pasek systemowy odejmuje już swoje piksele po wywołaniu metody display.getHeight (). Najpierw sprawdzam, czy pasek systemowy jest obecny, a następnie zbliża się Ben Claytons, który działa dobrze na telefonach.
źródło
Dzięki @Niklas +1 jest to właściwy sposób, aby to zrobić.
Przepraszam, jeśli kod nie jest w 100% poprawny, przekonwertowałem go z Xamarin C #, ale to jest właśnie tego. Działa z wycięciami itp.
źródło
Przełączone rozwiązanie pełnoekranowe:
To rozwiązanie może wyglądać jak obejście, ale w rzeczywistości bierze pod uwagę to, czy aplikacja działa na pełnym ekranie (czyli ukrywanie paska stanu), czy nie:
W ten sposób, jeśli Twoja aplikacja jest obecnie na pełnym ekranie,
barheight
będzie równa 0.Osobiście musiałem to wykorzystać do skorygowania bezwzględnych współrzędnych TouchEvent, aby uwzględnić pasek stanu w następujący sposób:
I to uzyska absolutną współrzędną y, niezależnie od tego, czy aplikacja będzie pełnoekranowa, czy nie.
Cieszyć się
źródło
W Androidzie 4.1 i nowszych możesz ustawić zawartość aplikacji tak, aby pojawiała się za paskiem stanu, aby zawartość nie zmieniała się, ponieważ pasek stanu ukrywa się i pokazuje. Aby to zrobić, użyj SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN. Konieczne może być również użycie SYSTEM_UI_FLAG_LAYOUT_STABLE, aby pomóc aplikacji zachować stabilny układ.
Gdy zastosujesz to podejście, Twoim obowiązkiem jest upewnić się, że krytyczne części interfejsu aplikacji (na przykład wbudowane elementy sterujące w aplikacji Mapy) nie zostaną zakryte przez paski systemowe. Może to spowodować, że Twoja aplikacja będzie bezużyteczna. W większości przypadków można sobie z tym poradzić, dodając atrybut android: fitsSystemWindows do pliku układu XML, ustawiony na wartość true. Dostosowuje to dopełnienie nadrzędnej grupy ViewGroup, aby pozostawić miejsce dla okien systemu. Jest to wystarczające dla większości aplikacji.
W niektórych przypadkach może być jednak konieczne zmodyfikowanie domyślnego dopełnienia, aby uzyskać pożądany układ aplikacji. Aby bezpośrednio manipulować układem zawartości w stosunku do pasków systemowych (które zajmują przestrzeń zwaną „wstawkami zawartości” okna), należy przesłonić fitSystemWindows (wstawki Rect). Metoda fitSystemWindows () jest wywoływana przez hierarchię widoku, gdy zmieniają się wstawki zawartości okna, aby umożliwić odpowiednie dostosowanie zawartości okna. Przesłaniając tę metodę, możesz obsługiwać wstawki (a więc i układ aplikacji) w dowolny sposób.
formularz: https://developer.android.com/training/system-ui/status.html#behind
źródło
Jeśli znasz dokładnie rozmiar VS wysokość
lubić
na przykład w urządzeniu o rozmiarze ekranu 320 x 480 wysokość paska stanu wynosi 25 pikseli, w przypadku urządzenia o rozdzielczości 480 x 800 wysokość paska stanu musi wynosić 38 pikseli
możesz po prostu uzyskać szerokość widoku / rozmiar ekranu, wystarczy użyć instrukcji if else, aby uzyskać wysokość paska stanu
źródło
Powodem, dla którego najlepsza odpowiedź nie działa dla niektórych osób, jest to, że nie można uzyskać wymiarów widoku, dopóki nie będzie on gotowy do renderowania. Użyj a,
OnGlobalLayoutListener
aby uzyskać wspomniane wymiary, kiedy faktycznie możesz:To najbardziej niezawodna metoda.
źródło
Ponieważ tryb wielu okien jest już dostępny, aplikacja może nie mieć paska stanu u góry.
Po rozwiązaniu automatycznie załatw wszystkie sprawy.
lub programowo
możesz również uzyskać widok roota przez
Aby uzyskać więcej informacji na temat uzyskiwania widoku głównego, patrz: https://stackoverflow.com/a/4488149/9640177
źródło
Ten problem stał się ostatnio dla mnie istotny ze względu na wycięcie w moim Pixelu 3XL. Naprawdę podobało mi się rozwiązanie dla programistów Androida , ale chciałem mieć możliwość uzyskania wysokości paska stanu do woli, ponieważ było to szczególnie potrzebne do animacji pełnoekranowej, w którą musiałem grać. Poniższa funkcja umożliwiła niezawodne zapytanie:
A potem w klasie aktywności:
Oczywiście będziesz chciał przekazać słabe odniesienie aktywności do parametru metody statycznej klasy Helper, ale dla zwięzłości powstrzymałem się w tym przykładzie.
blurBitmap
IerrorHudFrameLayout
są pomijane z tego samego powodu, ponieważ nie odnoszą się bezpośrednio do uzyskania wysokość paska stanu.źródło
Wersja Kotlin, która łączy dwa najlepsze rozwiązania
status_bar_height
wartość, jeśli występujestatus_bar_height
nie jest obecny, oblicza wysokość paska stanu na podstawie wystroju oknaźródło